在spring boot的项目中整合Shiro和redis的时候遇到类型转换问题,com.troyboot.java.system.po.UserPo cannot be cast to com.troyboot.java.system.po.UserPo,初步查到的原因是devtools类加载器不同导致的。
解决方案一:
在你的realm文件中,修改第一个参数为用户名;
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getAccount(), password, getName());
那么在类型强转的时候,也需要改成相应的类型(String);
public static String getUserAccount() {
Object object = getSubjct().getPrincipal();
return String.valueOf(object);
}
解决方案二:
优雅一点
PropertyUtils.copyProperties(to,from);
public static UserPo getUser() {
Object object = getSubjct().getPrincipal();
UserPo userPo = new UserPo();
try {
PropertyUtils.copyProperties(userPo,object);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
return userPo;
}
解决方案三:
如果你没有看懂我写的什么,或者你不需要热部署,可以在pom.xml文件中把spring-boot-devtools依赖注释了;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
mybatis的mapper文件也会遇到这个问题,修改配置文件也可以,文章开头的链接里面有讲解。
网友评论