springboot 使用 dev tool 导致 CastException
2024-08-23 06:12:11
1、背景
项目使用了 Spring + shiro 实现 权限控制, 使用AOP 对 每个 Controller 进行 log 记录时,需要从 shiro 中 获取 username字段, 问题就这样出现了。
UserDO userDO = (UserDO) SecurityUtils.getSubject().getPrincipal();
出现 java.lang.ClassCastException:
com.xxx.common.dal.dataobject.UserDO cannot be cast to com.xxx.common.dal.dataobject.UserDO
心里一惊,这怎么回事,这段代码我看其他地方也有些的。难道前面的没有问题??
- 策略一:
- 立马debug 试了一下以前的代码,发现 都没有进入,一直没有调用。
策略二: google
- 显示关键字 查了 `SecurityUtils.getSubject().getPrincipal();`` 发现一堆的文章,没有说不能正常的 cast的问题。 要 怀疑人生了!!!
- 不停的查,终于看到一篇 springboot dev tool 引起的 CastException 问题(Idea开启springboot 热加载,导致的Shiro类型转换异常) [https://juejin.im/post/5da46ac1e51d457806260f1a]
- 立马 项目中搜索 是否引用了 de v tool,发现确实是用了,立马 注释掉 测试。
- 完美的执行了。
- 查了下 de v tool 的一些信息,发现他会 使用 RestartClassloader. 官网也有相应的说明。https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html
反思:
看到 异常信息,并且 类的权限定名都一样,应该要 想到 肯能是 classLoader 的问题了,这是基础,但 在实际中 却不能很好的应用 知识。
花了我好久的时间来排查这个问题,真是太 low b了。
最新文章
- msdia80.dll文件出现在磁盘根目录下的解决方案
- Azure Media Service
- spring 官方下载地址(Spring Framework 3.2.x&;Spring Framework 4.0.x)
- Yii2的深入学习--自动加载机制
- MySQL的学习--用户创建授权
- 内省(Introspector)
- PL/pgSQL学习笔记之八
- sqlserver2008 解决 ldf文件过大的方法
- Redis源代码分析(十)--- testhelp.h小测试框架和redis-check-aof.c 日志检测
- 第二章 Linux目录学习
- Android为TV端助力:RecyclerView更新数据时焦点丢失
- using Newtonsoft.Json;
- 一个suse11 sp1的crash工具版本问题
- python设计模式第二十四天【命令模式】
- C++如何禁止对象的复制操作
- 1950261 - SAP HANA Database Backup Policy Recommendations and Regular Backup Script
- CentOS 7 - 创建新用户
- flask跨域请求
- Oracle数据库的“健康指示器”——事件(events)
- Alpha阶段事后诸葛分析