Springboot 报错java.lang.ClassCastException: A cannot be cast to A

问题 Springboot 报错java.lang.ClassCastException: A cannot be cast to A

最近在自己写一个商城系统,用的是SpringBoot,因为是第一次实践从零开始,很多底层的问题层出不穷,着实让我很头痛。

报这个错是我在获取登录用户信息的时候报错的:

MainUser mb=(MainUser) request.getSession().getAttribute(“user”);

报错信息:
java.lang.ClassCastException: com.model.MainUser cannot be cast to om.model.MainUser

原因

我就很纳闷了,两个是同一个实体怎么就不可以转换了,后面我查询了很多大神的笔记,发现是因为我SpringBoot用了热部署的原因。

具体原因

因为我是用springboot整合shiro,使用redis做缓存管理,那么会用到shiro-redis这个依赖,那么问题来了,热部署+shiro-redis会导致:我们登录时存入在session中的用户信息,在我们再次取出来转为User时,报错:classcastexception。由于,shiro-redis使用的类加载器和其他类使用的类加载器不同。

解决方法

方法一

我注释掉pom.xml中热部署的那段就可以了。

<!-- springboot 热部署 -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional>
 </dependency>

方法二

让所有的类的类加载器是同一个。 要实现这个,需要生成一个文件:
在src/main/resources下面加上配置文件META-INF/spring-devtools.properties
在这里插入图片描述
spring-devtools.properties配置:

restart.include.shiro-redis=/shiro-[\\w-\\.]+jar

总结

建议使用第二种,因为把热部署关了的话,不管是改前端还是后台的代码都需要重启之后才会生效,这对于开发阶段来说太难受了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值