Spring Boot 3.x集成OAuth2.0遇javax.servlet.Filter类找不到异常
Spring Boot 3.x集成OAuth2.0时出现
javax.servlet.Filter缺失错误的解决建议 错误信息
添加SecurityConfig配置类后触发以下错误:
Caused by: java.lang.NoClassDefFoundError: javax/servlet/Filter at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na] ... Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter ...
对应的配置类
package com.trojan.loginserver.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; import static org.springframework.security.config.Customizer.withDefaults; @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) .oauth2Login(withDefaults()); return http.build(); } }
项目pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.trojan</groupId> <artifactId>login-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>login-server</name> <description>login-server</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>17</java.version> </properties> <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-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> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-core</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.3.0</version> <!-- Update to the latest version --> <configuration> <from> <image>openjdk:17-jdk-slim</image> </from> <to> <image>trojan2877/login-server</image> </to> </configuration> </plugin> </plugins> </build> </project>
问题背景
在Spring Boot 3.3.4后端服务中集成OAuth2.0,添加上述SecurityConfig配置类后触发javax.servlet.Filter缺失的错误,推测与Servlet依赖有关,但不清楚Spring Boot 3.x环境下的解决方案,寻求有效建议。
解决建议
1. 修复JJWT依赖兼容性
当前使用的jjwt:0.9.1是基于Java EE的旧版本,完全不支持Spring Boot 3.x依赖的Jakarta EE规范,需替换为支持Jakarta的新版本:
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.12.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.12.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.12.5</version> <scope>runtime</scope> </dependency>
移除原有的单jjwt依赖,改用上述拆分后的依赖包。
2. 排查依赖树中的旧Servlet API
执行以下命令查看项目依赖树,确认是否有其他依赖强制引入了javax.servlet相关包:
mvn dependency:tree
如果发现冲突依赖,可通过<exclusions>标签排除旧版javax.servlet相关依赖。
3. 清理并重新构建项目
执行清理命令清除本地缓存,再重新构建项目:
mvn clean install -U
内容的提问来源于stack exchange,提问作者yourandroidude 123
相关产品推荐
相关产品推荐

