此文章发布于70
个月前,部分信息可能已经过时
,请自行斟酌确认。
这个坑真是不小,看着报错的异常信息都想吐:model.User cannot be cast to model.User
问题代码如图:
解决方案一
不使用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);
}
不想多说,解决方案见: