Spring Boot 3出现javax.servlet.http.HttpServletRequest类找不到异常求助
解决Spring Boot 3.0升级后
java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest异常 问题根源
Spring Boot 3.x基于Jakarta EE 9+,所有原javax.*命名空间的API已迁移至jakarta.*,你的项目中仍存在依赖旧版javax.servlet的组件(如spring-security-social-facebook),同时代码中未完成javax.servlet到jakarta.servlet的包路径替换,最终导致类加载冲突。
具体修复步骤
1. 替换过时的社交登录依赖
移除pom.xml中基于javax的Spring Security Social相关依赖:
<!-- 移除以下旧依赖 --> <dependency> <groupId>org.springframework.security.social</groupId> <artifactId>spring-security-social</artifactId> <version>1.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security.social</groupId> <artifactId>spring-security-social-facebook</artifactId> <version>1.1.6.RELEASE</version> </dependency>
添加Spring Boot官方推荐的OAuth2 Client依赖(适配Jakarta):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency>
2. 重构Security配置类
替换原SocialConfig及相关配置,使用OAuth2 Client方式配置Facebook登录:
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.web.SecurityFilterChain; @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/", "/login**").permitAll() .anyRequest().authenticated() ) .oauth2Login(oauth2 -> oauth2 .loginPage("/login") ); return http.build(); } }
3. 修正代码中的包引用
将所有代码中import javax.servlet.http.HttpServletRequest;替换为:
import jakarta.servlet.http.HttpServletRequest;
4. 清理冲突依赖
执行Maven命令排查残留的javax.servlet依赖:
mvn dependency:tree | grep javax.servlet
找到引入javax.servlet的依赖后,在pom.xml中添加排除规则,示例:
<dependency> <!-- 存在问题的依赖 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency>
验证修复
重新构建项目并启动,点击“Login using Facebook”即可正常跳转授权,不会再出现类找不到的异常。
内容的提问来源于stack exchange,提问作者Jason Chuang
相关产品推荐
相关产品推荐

