spring boot处理rest跨域首选@crossorigin注解(单接口)或webmvcconfigurer全局配置(中大型项目),corsfilter适用于网关或动态策略场景,核心是正确设置cors响应头且兼顾安全与可维护性。

Spring Boot 处理 REST 接口跨域请求,核心是让后端响应中带上合法的 CORS(Cross-Origin Resource Sharing)头信息,使浏览器放行前端发起的跨域 AJAX 请求。实际开发中,选哪种方式取决于项目规模、安全要求和维护成本——不是越复杂越好,而是够用且可控。
@CrossOrigin 注解:适合单个接口或少量接口
这是最轻量、最直观的方式,直接在 Controller 类或具体方法上加注解,无需额外配置类。
- 加在类上:该 Controller 下所有接口都允许跨域,比如
@CrossOrigin(origins = "http://localhost:5173") - 加在方法上:仅该接口生效,更精细,例如登录接口需携带 Cookie,而查询接口不需要,可分别配置
- 支持细粒度控制:可指定
origins(允许多个,用数组)、methods(如只允许 GET/POST)、allowCredentials(是否传 Cookie)、maxAge(预检缓存秒数) - 注意:
origins = "*"不能与allowCredentials = true同时使用,否则浏览器会拒绝响应
WebMvcConfigurer 全局配置:适合中大型项目
当接口数量多、跨域规则统一时,推荐用配置类一次性声明规则,避免到处加注解。
- 新建一个
@Configuration类,实现WebMvcConfigurer接口 - 重写
addCorsMappings方法,在CorsRegistry中注册路径模式(如"/**")、允许的源、方法、凭证支持等 - 示例中常设
allowedOrigins为具体域名列表(如{"http://localhost:3000", "https://prod.example.com"}),不建议长期用"*" - 若前端需带 Cookie 或认证头,必须设
allowCredentials(true),且allowedOrigins不能为通配符
CorsFilter 过滤器:适用于网关或需深度定制场景
基于 Servlet Filter 的方式,比 WebMvcConfigurer 更底层,适合集成到 Spring Cloud Gateway 或需要动态判断跨域策略的项目。
- 手动创建
CorsConfiguration,设置allowCredentials、allowedOrigins、allowedHeaders等 - 通过
UrlBasedCorsConfigurationSource绑定路径匹配规则(如"/api/**") - 注册为
@Bean,Spring Boot 启动时自动加载 - 优势是可结合业务逻辑做运行时判断,比如根据请求 Header 或用户角色决定是否放行
其他方式简要说明
还有两种较少用但存在合理场景的方式:
-
Response 对象手动设头:在 Controller 方法里调用
response.setHeader("Access-Control-Allow-Origin", "..."),灵活性高但重复代码多,不推荐常规使用 - ResponseBodyAdvice 增强返回:在统一响应包装逻辑中注入 CORS 头,适合已有全局统一封装结构的项目,但需注意与已有 CORS 配置冲突
实际选型建议:新项目起步阶段用 @CrossOrigin 快速验证;进入联调或上线前,切换为 WebMvcConfigurer 全局配置,明确约束来源和行为;有网关层或特殊安全策略再考虑 CorsFilter。关键不是“全放开”,而是“放得清楚、收得回来”。











