springboot+shiro+redis出现类转换异常问题

今天使用bootdo框架搭建环境,由于每次修改代码都要重启IDE,为了方便就打开了热部署,然后就遇到了一个很神奇的问题。
springboot+shiro+redis出现类转换异常问题_第1张图片
登录成功,直接报类转换异常:
springboot+shiro+redis出现类转换异常问题_第2张图片
通常只有类名和类加载器一样,JVM才会判断两个类相同,报这样的错,那肯定类加载器不一样了,于是打印一下:
在这里插入图片描述
果然,发现从redis取出来的实体类是AppClassLoader这个类加载器,查看SpringBoot DevTools源码会发现,重启会创建一个新的类加载器,也就是RestartClassLoader,而且DevTools默认会对 IDE 中引入的所有项目使用 restart 类加载器,对引入的 jar 包使用 base 类加载器,因此要保证热部署成功,使用的类加载器一致就好了。

1.创建一个META-INF / spring-devtools.properties文件。
springboot+shiro+redis出现类转换异常问题_第3张图片
查阅资料,了解到spring-devtools.properties文件可以包含以restart.exclude和restart.include为前缀的属性。 include元素是应该被拉入到“重启”类加载器中的项目,而排除元素是应该被下推到“基本”类加载器中的项目

2.加入以下代码
restart.include.mapper=/mapper-[\w-\.]+jar
restart.include.shiro=/shiro-[\w-\.]+jar
restart.include.thymeleaf=/thymeleaf-extras-shiro-2.0.0.jar

这样从通过shiro从redis取出来的实体类也被强制使用RestartClassLoader,大功告成

你可能感兴趣的:(springboot+shiro+redis出现类转换异常问题)