Spring Boot整合Spring Security时springSecurityFilterChain创建失败求助
问题分析
这个ClassCastException的核心原因是Spring Boot 3.x 基于 Jakarta EE 9+,所有Servlet相关API已从javax.servlet迁移到jakarta.servlet。而你的项目中出现了javax.servlet.Filter与Spring Security 6.x(适配Jakarta EE)提供的CsrfFilter(实现jakarta.servlet.Filter)的类型不匹配,本质是依赖冲突或配置引用了旧的javax相关类。
排查与解决步骤
清理依赖冲突
- 用
mvn dependency:tree命令生成依赖树,找出所有引入javax.servlet-api的依赖,在对应的<dependency>节点中添加排除规则:<exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> - 确保Spring Security依赖使用Spring Boot Starter提供的适配版本,不要手动指定旧版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
- 用
修正配置类API引用
检查你的Security配置类,将所有javax.servlet相关的导入替换为jakarta.servlet包下的类:// 错误导入 // import javax.servlet.Filter; // 正确导入 import jakarta.servlet.Filter;清理缓存并重建项目
- 执行
mvn clean install清理旧编译文件与依赖缓存 - 若使用IDEA,执行
File -> Invalidate Caches...清理IDE缓存后重启
- 执行
排查第三方依赖兼容性
检查项目中其他第三方库是否未适配Jakarta EE,优先更换为支持Jakarta的版本(例如将commons-fileupload替换为commons-fileupload2)
验证
完成上述操作后重启项目,若仍报错,可提供mvn dependency:tree的输出结果进一步排查。
内容的提问来源于stack exchange,提问作者Артём Орёл
相关产品推荐
相关产品推荐

