You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.3.1+JDK21启动报错:找不到jakarta.servlet.Filter.class

问题分析与解决方案

核心原因

你的项目中spring-boot-starter-tomcat和jakarta.servlet-api都设置了scope=provided,本地运行Spring Boot应用时,这些依赖不会被加入类路径,导致Spring无法找到jakarta.servlet.Filter.class,进而处理CORSFilter配置类时抛出I/O失败异常。

另外,Spring Boot 3.x已全面切换到Jakarta EE规范(取代旧Java EE),手动引入jakarta.servlet-api可能和spring-boot-starter-web自带的Servlet API版本冲突。


解决步骤

1. 调整Maven依赖配置

修改pom.xml中的以下依赖:

  • 移除spring-boot-starter-tomcat的scope=provided,让本地运行时能加载内嵌Tomcat:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    
  • 删除手动引入的jakarta.servlet-api依赖,因为spring-boot-starter-web已包含适配Spring Boot版本的Servlet API:
    <!-- 移除该依赖 -->
    <!-- <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency> -->
    

2. 修正CORSFilter类的导入

确保你的CORSFilter类使用Jakarta EE的Filter接口,替换旧的javax.servlet导入:

import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

// 示例CORSFilter实现
public class CORSFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        HttpServletRequest req = (HttpServletRequest) request;
        
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
        
        if ("OPTIONS".equalsIgnoreCase(req.getMethod())) {
            res.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(request, response);
        }
    }
}

3. 清理并重建项目

执行以下Maven命令清理缓存并重新构建:

mvn clean install

重启IDE,确保新依赖被正确加载后,重新运行Spring Boot应用。


内容的提问来源于stack exchange,提问作者Ishani Samaraweera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:08:11