此文章发布于79个月前,部分信息可能已经过时,请自行斟酌确认。
这个坑真是不小,看着报错的异常信息都想吐: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);
}不想多说,解决方案见: