【发布时间】:2016-04-28 17:41:33
【问题描述】:
在Tomcat中,我们可以这样做:
<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>
我想和Spring Boot共享二级域的cookie,怎么做?
【问题讨论】:
在Tomcat中,我们可以这样做:
<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>
我想和Spring Boot共享二级域的cookie,怎么做?
【问题讨论】:
Spring Boot 嵌入的服务器的设置可用作应用程序属性(# EMBEDDED SERVER CONFIGURATION 部分下的listed here 和命名空间server.servlet.session.cookie.*)。
与上面的 Tomcat 配置等效的应该是:
# 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=/
【讨论】:
servlet
(在撰写本文时这适用于 Spring 1.5.x)
要添加到@radrocket81 的回复,这里有一个示例代码。这也是您设置 Spring Boot cookie 的 max-age 和其他属性的方式如果您通过 @EnableRedisHttpSession 启用 Redis 会话,因为应用程序属性 server.session 将不会被应用。
@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;
}
【讨论】:
我的解决方案是定义一个 CookieSerializer bean 并提供适合我的设置的域模式。
【讨论】: