web-dev-qa-db-fra.com

Comment définir le domaine et le chemin du cookie avec Spring Boot

Dans Tomcat, nous pouvons le faire comme ceci:

<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>

Je souhaite partager le cookie d'un domaine de second niveau avec Spring Boot, comment procéder?

6
zhe zhu

Les paramètres du serveur intégré dans Spring Boot sont disponibles en tant que propriétés d'application ( répertoriés ici sous la section # EMBEDDED SERVER CONFIGURATION et l'espace de noms server.servlet.session.cookie.*).

L'équivalent de la configuration Tomcat ci-dessus devrait être:

# properties in /src/resources/application.properties
server.servlet.session.cookie.domain=.XXXX.com
server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.path=/
10
sthzg

(Ceci s'applique à Spring 1.5.x au moment d'écrire ces lignes)

Pour ajouter à la réponse de @ radrocket81, voici un exemple de code. C'est également comme cela que vous définissez les propriétés max-age et autres des cookies de démarrage Spring si vous avez activé la session Redis par @EnableRedisHttpSession , car la propriété d'application server.session ne sera pas appliquée.

@Bean
public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(SessionRepository<S> sessionRepository, ServletContext servletContext) {
    SessionRepositoryFilter<S> sessionRepositoryFilter = new SessionRepositoryFilter<S>(sessionRepository);
    sessionRepositoryFilter.setServletContext(servletContext);
    CookieHttpSessionStrategy httpSessionStrategy = new CookieHttpSessionStrategy();
    httpSessionStrategy.setCookieSerializer(this.cookieSerializer());
    sessionRepositoryFilter.setHttpSessionStrategy(httpSessionStrategy);
    return sessionRepositoryFilter;
}

private CookieSerializer cookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookieName("CUSTOM_SESSION_KEY");
    serializer.setDomainName("domain.com");
    serializer.setCookiePath("/");
    serializer.setCookieMaxAge(10); //Set the cookie max age in seconds, e.g. 10 seconds
    return serializer;
}
1
EwyynTomato

Ma solution consistait à définir un bean CookieSerializer et à fournir le modèle de domaine qui convient à ma configuration.

Comme ceci: Spring Session - Custom Cookie

0
radrocket81