所以我已经成功使用spring session和redis在开发localhost域上实现SSO。 但是当我使用两个子域部署到服务器时。
login.example.com
apps.example.com
他们总是在每个子域上创建新的会话ID。 我已经尝试在tomcat配置中使用Context进行配置。
<Context sessionCookieDomain=".example.com" sessionCookiePath="/">
但没有运气。
答案 0 :(得分:0)
Spring会话在应用程序级别上移动会话管理,因此尝试配置容器(在您的情况下为tomcat)无效也就不足为奇了。目前在spring-session代码中有一个 TODO 以允许设置域,但是没有实现。
也许最好打开一个问题,允许在https://github.com/spring-projects/spring-session/issues/112上设置域名或评论/投票。
同时,解决方法是根据MultiHttpSessionStrategy
自行实施CookieHttpSessionStrategy
。
答案 1 :(得分:0)
最后,我成功地在应用程序级别上设置了域名。
你是对的,我希望将来他们能够实现设置域名的功能。
现在我为自己的实施创建CustomCookieHttpSessionStrategy。
private Cookie createSessionCookie(HttpServletRequest request,
Map<String, String> sessionIds) {
...
sessionCookie.setDomain(".example.com");
// TODO set domain?
...
}
然后将bean注册为HttpSessionStrategy。