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

Spring Boot CORS配置问题:特定域名放行+指定端点允许任意源失效

问题原因

你的问题源于两个关键点:

  1. 全局CORS配置的/**匹配优先级高于@CrossOrigin注解,导致端点的局部配置被全局规则覆盖;
  2. 全局配置中allowCredentials(true)与@CrossOrigin(origins="*")存在冲突——浏览器规范明确禁止同时设置Access-Control-Allow-Credentials: true和Access-Control-Allow-Origin: *,这是请求被拦截的核心原因。
正确配置方案

1. 调整全局CORS配置,排除目标端点

修改全局配置,让它仅作用于除/data外的所有接口,释放/data的局部配置权限:

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
            // 排除/data端点,不应用全局规则
            .excludePathPatterns("/data")
            .allowedOrigins("https://example.com", "https://example2.com")
            .allowedMethods("*")
            .allowedHeaders("*")
            .exposedHeaders("Authorization", "Cache-Control", "Content-Language", "Content-Type", "Expires", "Last-Modified", "Pragma")
            .allowCredentials(true)
            .maxAge(3600);
}

2. 修正端点的@CrossOrigin配置

如果/data不需要接收凭证(如Cookie、HTTP认证信息),直接使用如下配置即可实现任意源访问:

@GetMapping("/data")
@CrossOrigin(origins = "*", allowedMethods = "*", allowedHeaders = "*")
public ResponseEntity<String> getData() {
    return ResponseEntity.ok("Some data");
}

注意:若/data必须支持凭证访问,则不能使用*作为源,需通过动态获取请求源的方式处理,但这不符合你“允许任意源”的需求,因此推荐上述无凭证的配置方案。

最终效果

  • 除/data外的所有接口:仅允许https://example.com、https://example2.com带凭证访问;
  • /data接口:允许任意源无凭证访问,且不会被全局规则拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:13