Spring Boot:Shiro 类型转换异常 model.User cannot be cast to model.User

此文章发布于 60 个月前,部分信息可能已经过时,请自行斟酌确认。

这个坑真是不小,看着报错的异常信息都想吐:model.User cannot be cast to model.User

问题代码如图:
2019050694641.png

解决方案一

不使用spring-boot-devtools热部署,问题是ClassLoader类加载器的不同导致的类型转换异常,项目启动时加载项目中的类使用的加载器都是org.springframework.boot.devtools.restart.classloader.RestartClassLoader,而从shiro session取出来的对象(从redis中取出经过反序列化)的类加载器都是sun.misc.Launcher.AppClassLoader,所以不使用热重载就没有这个问题。

解决方案二

通过 Json 的方法转成想要的对象。

Subject subject = SecurityUtils.getSubject();
Object obj = subject.getSession().getAttribute("currUser");
SysUser user;
if (obj instanceof SysUser) {
    user = (SysUser) obj;
} else {
    user = JSON.parseObject(JSON.toJSON(obj).toString(), SysUser.class);
}

不想多说,解决方案见:

最后修改:2019 年 05 月 06 日 09 : 50 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论