@CrossOrigin注解是Spring MVC中最简单直接的跨域解决方案,支持方法级和类级配置,可精细控制源、方法、头信息等,且优先级高于全局配置。

Spring MVC 中使用 @CrossOrigin 注解是最简单、最直接的跨域解决方案,适用于大多数前后端分离场景。它能精准控制哪些接口允许跨域、允许哪些源、方法、头信息等,比全局配置更灵活、更安全。
在 Controller 方法上加 @CrossOrigin
这是最常用的方式,只对特定接口生效,粒度细、风险低。
- 直接加在处理请求的方法上,如
@GetMapping("/api/user")上方写@CrossOrigin - 不带参数时,默认允许所有源(
*)、GET/HEAD/POST 方法、简单请求头,但不支持携带凭证(如 Cookie) - 若前端需要发送 Cookie 或使用
withCredentials: true,必须显式指定origins(不能用*),并开启allowCredentials = true
在 Controller 类上加 @CrossOrigin
适用于整个控制器下所有接口都需统一跨域策略。
- 加在类名上方,如
@RestController同一行或上方 - 可配合方法级注解使用:方法上的
@CrossOrigin会覆盖类级别的配置 - 适合中后台管理类接口,比如所有
/api/admin/**接口都只允许来自https://admin.example.com
常用配置参数说明
通过注解属性精细控制跨域行为,避免过度开放。
立即学习“Java免费学习笔记(深入)”;
-
origins = {"https://front.example.com", "http://localhost:3000"}:明确允许的源,生产环境务必避免用"*" -
methods = {RequestMethod.GET, RequestMethod.POST}:限制允许的 HTTP 方法 -
allowedHeaders = {"Content-Type", "Authorization"}:声明允许的请求头 -
maxAge = 3600:预检请求缓存时间(秒),减少 OPTIONS 请求频次 -
allowCredentials = true:启用后,前端才能发带 Cookie 的请求,同时origins不能为"*"
与 WebMvcConfigurer 全局配置的区别
@CrossOrigin 是局部控制,而全局配置(如实现 WebMvcConfigurer 并重写 addCorsMappings)适合统一规则。
- 全局配置更适合开发阶段快速放开所有接口,或对某路径前缀(如
/api/**)批量设置策略 - 但线上环境推荐优先用注解,因为更清晰、可追溯、便于审计;全局配置容易“一开全开”,埋下安全隐患
- 两者共存时,局部注解优先级更高,会覆盖全局设定


















