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

如何在Spring Boot中从全局CORS配置排除特定控制器?

特定控制器排除全局CORS配置的解决方案

方案一:全局配置中排除目标路径

如果你的全局CORS是通过WebMvcConfigurer的addCorsMappings配置的,直接在全局规则里排除目标控制器的路径,同时单独给该路径配置专属CORS规则即可:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 全局规则:对所有路径生效,但排除目标控制器的路径
        registry.addMapping("/**")
                .allowedOrigins("addr1", "addr2")
                .excludePathPatterns("/specific-addr3/**"); // 替换为你的控制器实际路径前缀

        // 目标控制器专属规则:仅允许addr3访问
        registry.addMapping("/specific-addr3/**")
                .allowedOrigins("http://addr3", "https://addr3");
    }
}

这种方式无需在控制器上加@CrossOrigin,所有规则统一在全局配置中管理,逻辑更清晰。

方案二:用@CrossOrigin禁用全局配置(Spring 5.3+)

如果想保留控制器上的@CrossOrigin注解,直接给注解添加globalCorsConfig = false属性,明确让该控制器不继承全局CORS规则:

@CrossOrigin(origins = {"http://addr3", "https://addr3"}, globalCorsConfig = false)
@RestController
@RequestMapping("/specific-addr3")
public class SpecificControllerForAddr3 {
    // 控制器方法实现
}

注意该属性仅支持Spring 5.3及以上版本,版本不足的话建议使用方案一。

验证要点

  • 用addr2访问目标控制器端点,浏览器控制台应出现跨域访问被拒绝的提示
  • 用addr3访问时能正常获取响应
  • 如果是Spring Security项目,需确保CORS配置在Security过滤链之前执行(比如在SecurityFilterChain中添加cors())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:12