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

Spring 4迁移至Spring 6时抛出java.lang.NoClassDefFoundError异常求助

解决Spring 6迁移中java.lang.NoClassDefFoundError: javax/servlet/Filter异常

问题根源

Spring 6全面切换到Jakarta EE规范,所有Servlet相关API包路径从javax.servlet.*变更为jakarta.servlet.*。你当前配置的com.thetransactioncompany.cors.CORSFilter是适配旧Java EE(javax)的版本,依赖已被移除的javax.servlet.Filter类,因此抛出该异常。

解决方案

1. 替换CORS过滤器为Jakarta兼容版本

使用适配Jakarta EE的CORS过滤器版本,比如com.thetransactioncompany.cors.jakarta.CORSFilter,需确保引入的依赖支持Jakarta规范。

如果用Maven,更新依赖:

<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.10</version> <!-- 2.10及以上版本支持Jakarta EE -->
</dependency>

2. 修改web.xml中的过滤器配置

将原过滤器的filter-class路径更新为Jakarta兼容类,同时清理重复的过滤器配置(当前配置了两个同实现类的过滤器,属于冗余):

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.thetransactioncompany.cors.jakarta.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. 清理旧的javax.servlet依赖残留

检查项目依赖配置(如pom.xml或build.gradle),排除所有javax.servlet相关依赖,确保只有jakarta.servlet的依赖存在:

<!-- 示例:排除Spring依赖中的javax.servlet -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>6.x.x</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 可选:改用Spring内置CORS支持

Spring 6自带原生CORS配置,无需依赖第三方过滤器,配置更简洁。可以通过XML或Java代码实现:

XML配置方式(spring-web.xml):

<mvc:cors>
    <mvc:mapping path="/**"
        allowed-origins="*"
        allowed-methods="GET,POST,HEAD,OPTIONS,PUT"
        allowed-headers="Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers"
        exposed-headers="Access-Control-Allow-Origin,Access-Control-Allow-Credentials"/>
</mvc:cors>

配置后可直接移除web.xml中的第三方CORS过滤器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:37