read session error

发布时间:2020-01-14 浏览次数:3090 文章来源:个人博客

shiro通过redis共享session实现多系统单点登陆,这个是很常见的配置,网上百度搭建教程一大堆。。

这次像往常一样搭建单点登录,但是由于是同一个业主单位,不同系统,因此需要实现不同系统的单点登陆。

然后按照以往配置,结果发现登陆失效了!一直以来都是用同一个系统做负载均衡,这次却报错:

read session error. settionId=XXXXXXXX-XXXX-XXXX

找了半天,最后发现是因为redis反序列化的问题!

因为第一个系统,包名是:com.xx.ucenter,而第二个是:com.xx.pp。

存入redis的时候,对象包名是:com.xx.ucenter.model,而反序列化的时候,包名变成了com.xx.pp.model。

这样就造成对象进行反序列化的时候出错了。。

解决办法有很多,比如将shiro登陆用户对象改成只记录ID:

return new SimpleAuthenticationInfo(admin, admin.getPassword(),this.getClass().getName());//放入shiro.调用CredentialsMatcher检验密码
改成
return new SimpleAuthenticationInfo(admin.getId(), admin.getPassword(),this.getClass().getName());//放入shiro.调用CredentialsMatcher检验密码

admin对象,改成admin.getId();

这样就能解决问题了!



key-word
read session error