spring boot跨域核心是返回正确cors响应头,推荐优先使用webmvcconfigurer全局配置:通过@configuration类实现addcorsmappings,统一管理/api/*等路径的allowedorigins、methods、headers、allowcredentials及maxage;注意allowcredentials=true时allowedorigins不可为"",应指定具体域名或改用allowedoriginpatterns。

Spring Boot 项目配置跨域请求,核心是让后端响应中带上正确的 CORS 响应头,告诉浏览器“允许这个来源访问”。实际开发中,推荐优先用全局配置方式,简洁、统一、易维护。
用 WebMvcConfigurer 全局配置(最常用)
这是官方推荐、项目中最主流的做法。只需一个配置类,就能控制所有接口的跨域行为:
- 创建一个带 @Configuration 注解的类,实现 WebMvcConfigurer 接口
- 重写 addCorsMappings 方法,在里面注册路径规则和跨域策略
- 例如允许本地前端(http://localhost:3000)调用所有 /api/** 接口:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
注意:allowedOrigins 不能和 allowCredentials(true) 同时设为 "*",否则浏览器会拒绝;需指定具体域名或改用 allowedOriginPatterns(如 "http://*.example.com")。
用 @CrossOrigin 注解做局部控制
适合只对个别接口或 Controller 开放跨域,比如管理后台和公开 API 混合部署时:
- 加在 Controller 类上:整个类下所有方法都支持跨域
- 加在具体方法上:仅该接口支持跨域
- 示例:
@CrossOrigin(origins = "https://admin.example.com", methods = {RequestMethod.GET})
这种方式灵活,但不建议全项目铺开使用——维护成本高,且容易遗漏或冲突。它会覆盖全局配置,适合兜底或特殊场景。
用 CorsFilter 手动注入(底层可控)
适用于需要精细控制预检请求(OPTIONS)、或集成自定义逻辑(如动态白名单、日志记录)的场景:
- 新建 CorsConfiguration,设置 origin、method、header、maxAge 等
- 用 UrlBasedCorsConfigurationSource 绑定路径模式(如
"/**") - 将配置封装进 CorsFilter 并注册为 Bean
它比 WebMvcConfigurer 更底层,不依赖 Spring MVC 的路径映射机制,适合网关层或非 MVC 场景,但日常业务项目一般不需要。
关键点提醒
CORS 是浏览器端的安全机制,后端只是“配合响应”,真正起作用的是那几个响应头:
-
Access-Control-Allow-Origin:必须存在,值要匹配请求源(不能是
*+allowCredentials) -
Access-Control-Allow-Credentials:设为
true才能携带 Cookie 或 Authorization -
Access-Control-Allow-Methods:明确列出允许的方法,避免用
"*"导致预检失败 - Access-Control-Max-Age:减少重复 OPTIONS 请求,提升性能
排查问题时,先看浏览器 Network 面板里有没有 OPTIONS 请求,再检查响应头是否完整、值是否正确。简单请求(如 GET + JSON)可能不触发预检,但 POST 带 Content-Type: application/json 一定会触发——这点最容易踩坑。











