Shiro Session缓存到redis 后获取用户信息强转错误问题

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