springsession使用redis共享session时,sessionid不一致的问题

网上能找到很多帖子说怎么实现redis来共享session,照着做完,发现两个独立应用配置到同一个redis后,获取的session id不一样。
怎么回事,他们写的不是很简单,怎么我这每次都不一样呢。

找了半天,原来springsession 使用cookie传递session id,每个cookie的path不一致。 springsession默认使用DefaultCookieSerializer 来序列化cookie信息,默认的获取cookiepath的方法如下:

private String getCookiePath(HttpServletRequest request) {
	if (this.cookiePath == null) {
		return request.getContextPath() + "/";
	}
	return this.cookiePath;
}

由于我设置了应用的server.context-path=app1,不是默认的/,导致每个应用获取的cookiePath是不一样的。所以每次都生成了新的session id。

解决方法:
定制一个自己的DefaultCookieSerializer ,可以复制这个类,改个类名SpecialCookieSerializer(原类依赖的几个工具类自己也复制一份改改),然后重写getCookiePath方法,

private String getCookiePath(HttpServletRequest request) {
    if (this.cookiePath == null) {           
        return "/";
    }
    return this.cookiePath;
}

然后在配置类中配置:

 @Bean
 public CookieHttpSessionStrategy cookieHttpSessionStrategy() {
     CookieHttpSessionStrategy strategy = new CookieHttpSessionStrategy();
     strategy.setCookieSerializer(new SpecialCookieSerializer());
     return strategy;
 }

重启每个应用,再试试就行了。

你可能感兴趣的:(服务配置)