Shiro Session缓存到redis 后获取用户信息强转错误问题
版本:renren-security 3.2.0 |
开发环境: |
1.Shiro开启redis缓存后。
2.单台机器启动服务,打开浏览器登录成功,进入首页,浏览器不关闭。
3.关闭服务,重新启动服务。
4.刷新浏览器后,后台会调用该方法:(SysUserEntity)SecurityUtils.getSubject().getPrincipal() 获取user对象。
5.报了强转错误:SysUserEntity cannot be cast to SysUserEntity。。。怎么解决?
-
2018-04-23
是不是开启了热更新
-
2018-05-14
同样的问题,也是登录的时候报错。我redis设置了不启用
-
2018-08-17
我猜测是您自己加入了 DevTools 工具来实现热加载,方便开发吧。
当使用DevTools的时候,该工具具有缓存效果,需要格外小心,当对象被序列化到缓存里时,当前应用的类加载器是C1,当你改变了一些代码或者配置文件的时候,DevTools 工具将会自动重新启动这个容器,并且创建一个新的类加载器 C2. 这时候调用这个具有缓存的方法时,缓存管理将会从缓存里找到该条缓存记录并进行反序列化操作。如果缓存库不考虑上下文的话,也就是没注意到类加载器的变化时,该对象将会有错误的类加载器(这解释了奇怪的异常)。
其实就是因上下文类加载器不同而产生这样的错误,那么归根结底就是因SpringBoot DevTools工具搞的鬼。
你删除 DevTools 依赖即可解决问题。