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

无法找到mvc:cors定义的Spring 4项目问题求助

解决Spring 4中<mvc:cors>元素找不到声明的问题

问题根源

<mvc:cors>这个XML配置元素是Spring 4.2及以上版本才新增的,如果你本地项目的Spring MVC版本低于4.2,哪怕xmlns和schemaLocation配置完全正确,也会触发cvc-complex-type.2.4.c报错——因为低版本的spring-mvc.xsd里根本没有定义这个元素。你反编译的war包对应的项目应该是用了Spring 4.2+版本,和你本地的版本不匹配。

解决方案

方案1:升级Spring MVC到4.2+版本

  • 检查项目依赖配置(Maven的pom.xml或Gradle的build.gradle),将spring-webmvc的版本升级到4.2.x及以上,注意要和项目中Spring核心模块的版本保持一致,比如:
    <!-- Maven示例 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.9.RELEASE</version>
    </dependency>
    
  • 升级后无需修改现有XML的命名空间配置,http://www.springframework.org/schema/mvc/spring-mvc.xsd会自动对应到新版本的schema定义。

方案2:不升级Spring版本,改用代码配置CORS

如果项目无法升级Spring版本,可以用以下两种替代方式实现相同的CORS规则:

方式一:实现WebMvcConfigurer(Spring 3.2+支持)
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(false)
                .maxAge(4800);
    }
}
方式二:自定义CORS Filter(兼容更低版本)

先创建Filter类:

public class CorsFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Max-Age", "4800");
        response.setHeader("Access-Control-Allow-Credentials", "false");

        // 直接处理OPTIONS请求,避免后续业务逻辑处理
        if ("OPTIONS".equals(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            filterChain.doFilter(request, response);
        }
    }
}

然后在web.xml中配置这个Filter:

<filter>
    <filter-name>corsFilter</filter-name>
    <filter-class>你的包路径.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>corsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:43:16