J'ai essayé Spring-Session en me référant à cet article En particulier, je voulais faire des paramètres basés sur XML au lieu d'annotations.
La documentation officielle a un exemple de configuration en XML.
Les paramètres Web.xml sont requis, veuillez donc vous référer à d'autres articles pour les définir.
Les paramètres de Bean sont basés sur le blog suivant étude de session de printemps
Je ne connais pas les détails car ils sont en chinois, mais il y a une explication détaillée, y compris le moment où le cookie est généré.
J'essaie les paramètres dans le blog suivant session de partage de nom de la zone enfant Spring-session & redis
Lorsque ce paramètre est appliqué
CookieName
: Le nom du cookie par défaut peut être remplacé
domainNamePattern
: peut émettre des cookies en considérant plusieurs domaines comme un seul domaine avec une expression régulière
Par exemple, ʻa.example.com,
b.example.com devient ʻexample.com
lorsqu'il est capturé avec l'expression régulière ci-dessous.
Code de vérification → Wandbox
Cela signifie que vous pouvez partager une session entre plusieurs serveurs
Lors d'une recherche en anglais, il semble bon de rechercher «réplication de session» ou «clustering de session».
domainName
: Spécifiez le nom d'hôte directement sans utiliser d'expression régulière (si domainNamePattern ne fonctionne pas bien, vous pouvez utiliser ceci)
<property name="domainName" value=".example.com"/>
<!-- spring-Activer les annotations dans la session-->
<context:annotation-config/>
<!-- Spring-Activer la classe de gestion de session côté session-->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<!--Enregistrer l'implémentation du client Redis dans le bean-->
<bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"/>
<!--Remplacer les paramètres de cookies par défaut-->
<bean class="org.springframework.session.web.http.DefaultCookieSerializer">
<property name="cookieName" value="JSESSIONID" />
<!--Nom de domaine"."Commencer avec-->
<property name="domainName" value=".example.com"/>
<!--L'expression régulière est un peu non confirmée-->
<!-- <property name="domainNamePattern" value="^.+?\\.(\\w+\\.[a-z]+)$" /> -->
</bean>
Puisqu'il n'y avait pas de domaine dans l'environnement de test Au départ, j'ai essayé d'obtenir le domaine du cookie uniquement avec l'adresse IP, mais cela ne fonctionnait pas selon la norme.
.foo.com
est valide pour x.foo.com
.com
, le cookie .com
est illégal car il n'y a pas de". "4.3.2 Rejecting Cookies
To prevent possible security or privacy violations, a user agent
rejects a cookie (shall not store its information) if any of the
following is true:
* The value for the Path attribute is not a prefix of the request-
URI.
* The value for the Domain attribute contains no embedded dots or
does not start with a dot.
* The value for the request-host does not domain-match the Domain
attribute.
* The request-host is a FQDN (not IP address) and has the form HD,
where D is the value of the Domain attribute, and H is a string
that contains one or more dots.
Examples:
* A Set-Cookie from request-host y.x.foo.com for Domain=.foo.com
would be rejected, because H is y.x and contains a dot.
Kristol & Montulli Standards Track [Page 7]
RFC 2109 HTTP State Management Mechanism February 1997
* A Set-Cookie from request-host x.foo.com for Domain=.foo.com would
be accepted.
* A Set-Cookie with Domain=.com or Domain=.com., will always be
rejected, because there is no embedded dot.
* A Set-Cookie with Domain=ajax.com will be rejected because the
value for Domain does not begin with a dot.
Concernant l'adresse IP et le cookie, je n'ai pu trouver que la description suivante
Fully-qualified host name (FQHN) means either the fully-qualified
domain name (FQDN) of a host (i.e., a completely specified domain
name ending in a top-level domain such as .com or .uk), or the
numeric Internet Protocol (IP) address of a host. The fully
qualified domain name is preferred; use of numeric IP addresses is
strongly discouraged.
Donc, si vous regardez le comportement
You can set a cookie to an IP address. You just cannot wildcard it! So while -domain=>'.289.11.63.71' is invalid, ->domain=>'289.11.63.71' is not (get rid of the period before the first set of numbers).
et
b.example.com`localhost
localhost: 8080 / application-a
et localhost: 8080 / application-b