Spring Boot 3.0与HttpSecurity兼容问题:Filter适配方案咨询
解决Spring Boot 3.0.2升级后HttpSecurity addFilter()的javax/jakarta兼容问题
问题描述
我将Spring Boot版本从2.5.2升级至3.0.2并完成部分重构,但遇到HttpSecurity的addFilter()方法要求传入javax.servlet.Filter,而Spring Boot 3.0已全面使用jakarta相关API的兼容问题。相关代码来自适配Spring Boot 2.5.2的YouTube教程。
当前Maven依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.31</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>4.2.1</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.7.5</version> </dependency> </dependencies>
注:因传递依赖漏洞,已将snakeyaml版本改为2.0
问题截图

解决方案
核心原因
Spring Boot 3.0基于Spring Framework 6,完全遵循Jakarta EE 9规范,所有javax.servlet相关API已替换为jakarta.servlet。你的项目中存在版本冲突的依赖,导致javax和jakarta API混用。
具体步骤
- 移除冲突的Spring Security依赖:直接删除pom.xml中手动引入的
spring-security-config:5.7.5依赖,Spring Boot的spring-boot-starter-security会自动引入适配3.0版本的Spring Security 6.x,该版本已完全基于jakarta.servlet。 - 更新自定义Filter的包导入:将所有自定义Filter类里的
import javax.servlet.*相关语句,替换为import jakarta.servlet.*,确保Filter实现的是jakarta.servlet.Filter接口。 - 升级第三方依赖版本:将
java-jwt升级到兼容Spring Boot 3.0的稳定版本(如4.4.0及以上),避免潜在的API兼容问题。 - 清理重建项目:执行
mvn clean install清理Maven缓存并重新构建,确保所有依赖生效。
内容的提问来源于stack exchange,提问作者Müseyib Ələkbər
相关产品推荐
相关产品推荐

