spring session实现不同项目之间session同步

spring session用作session共享的场景,比如我们商城里有个session,但是砍价、bbs,都是另外的项目,这时候,需要同一个用户,拥有相同的session。

很多人应该都知道,把session存在云端,比如redis。

OK,网上spring session+redis的文章很多,并且也比较简单的。

比如,springboot框架的话,这篇文章就行 http://blog.csdn.net/xiaoyu411502/article/details/48603597。

普通spring的话,那就这篇 http://www.cnblogs.com/beyang/p/6104802.html。

两种我都亲自测过可以。

好了,你们应该都搞定了吧。

这个工程里,

session.setAttribute("name", "scw");

那个工程里,就能够,

session.getAttribute("name").toString() 取到scw这个大侠的名字。

但我发现一个问题。

假如,两个项目,都是以xxxx.xx:8080/,或者xxxx.xx:8099/ 这种结尾的,那ok,可以同步

but,如果有项目,地址是xxxx.xx:8080/abcd/ ,就是说,路径中带上工程名的,sorry,同步不了啊。

我起先没有想到是这个path的问题,所以发现,为啥有些系统间能同步,有些不行,还以为拦截器问题。

后面发现是因为cookiePath的问题,所以,自己写了一个

class CustomerCookiesSerializer  implements CookieSerializer{

然后,重写getCookiePath。

private String getCookiePath(HttpServletRequest request) {

if (this.cookiePath == null) {

return "/";

}

return this.cookiePath;

}

把项目的path都搞成一样。

然后,@EnableRedisHttpSession的那个类里,加个cookieHttpSessionStrategy的bean

@Configuration

@EnableRedisHttpSession

public class RedisSessionConfig {

@Bean

    public JedisConnectionFactory connectionFactory() {

            return new JedisConnectionFactory();

    }

@Bean

    public CookieHttpSessionStrategy cookieHttpSessionStrategy() {

        CookieHttpSessionStrategy strategy = new CookieHttpSessionStrategy();

        strategy.setCookieSerializer(new CustomerCookiesSerializer());

        return strategy;

    }

}

 

你可能感兴趣的:(spring session实现不同项目之间session同步)