全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

SpringMVC CORS配置

SpringMVC提供多种CORS配置方式,灵活应对不同场景需求。

@CrossOrigin注解配置

在Controller方法上使用

Java
@RestController
@RequestMapping("/api")
public class UserController {

    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.findAll();
    }
}

在Controller类上使用

Java
@CrossOrigin(
    origins = "http://localhost:3000",
    methods = {RequestMethod.GET, RequestMethod.POST},
    allowedHeaders = {"Content-Type", "Authorization"},
    maxAge = 3600
)
@RestController
@RequestMapping("/api")
public class UserController {
    // 所有方法都应用CORS配置
}

注解属性说明

属性说明示例
origins允许的源{"http://a.com", "http://b.com"}
methods允许的方法{RequestMethod.GET, RequestMethod.POST}
allowedHeaders允许的请求头{"Content-Type", "Authorization"}
exposedHeaders暴露的响应头{"X-Custom-Header"}
allowCredentials允许凭证true
maxAge预检缓存时间3600

全局CORS配置

实现WebMvcConfigurer接口

Java
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("http://localhost:3000", "http://localhost:4000")
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
            .allowedHeaders("*")
            .allowCredentials(true)
            .maxAge(3600);
    }
}

多路径配置

Java
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // API接口配置
        registry.addMapping("/api/**")
            .allowedOrigins("http://localhost:3000")
            .allowedMethods("*")
            .allowCredentials(true);

        // 静态资源配置
        registry.addMapping("/static/**")
            .allowedOrigins("*")
            .allowedMethods("GET");
    }
}

CorsFilter过滤器配置

基于Filter的配置

Java
@Configuration
public class CorsFilterConfig {

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
        config.setAllowedMethods(Arrays.asList("*"));
        config.setAllowedHeaders(Arrays.asList("*"));
        config.setAllowCredentials(true);
        config.setMaxAge(3600L);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

XML配置方式

XML
<mvc:cors>
    <mvc:mapping path="/api/**"
        allowed-origins="http://localhost:3000"
        allowed-methods="GET,POST,PUT,DELETE"
        allowed-headers="*"
        allow-credentials="true"
        max-age="3600"/>
</mvc:cors>

配置方式对比

方式优点缺点适用场景
@CrossOrigin简单灵活,细粒度控制分散在各处单个接口特殊配置
WebMvcConfigurer统一管理,配置集中不够灵活大部分项目
CorsFilter优先级高,全局生效配置稍复杂需要高优先级拦截
XML传统方式,兼容性好配置繁琐老项目维护

要点总结

  • @CrossOrigin适用于方法级别细粒度配置
  • WebMvcConfigurer是最常用的全局配置方式
  • CorsFilter优先级最高,适合特殊需求
  • allowCredentials为true时origins不能为*
  • 根据项目需求选择合适的配置方式

📝 发现内容有误?点击此处直接编辑

← 上一篇 Nginx反向代理解决跨域
下一篇 → 拦截器实现CORS
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库