spring mvc处理跨域的核心是后端正确返回cors响应头,而非前端绕过;关键配置包括@crossorigin注解(类/方法级)、webmvcconfigurationsupport全局配置(路径、源、方法、凭证等)及自定义filter(兼容老版本、需手动处理options预检)。

Spring MVC 处理跨域请求的核心是让服务器明确告诉浏览器:“允许哪些源访问本接口”。浏览器看到合法的 CORS 响应头,就不会拦截前端的 AJAX 请求。关键不在前端绕过,而在后端正确响应。
理解跨域拦截的触发条件
只要协议、域名、端口任一不同,就构成跨域。比如前端 http://localhost:3000 调用后端 http://localhost:8080,虽同域但端口不同,即触发同源策略拦截。错误提示通常为:
"No 'Access-Control-Allow-Origin' header is present on the requested resource" 或 "Origin xxx is therefore not allowed access"。
@CrossOrigin 注解(最常用、粒度细)
适合局部控制,可加在 Controller 类或具体方法上:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 加在类上:整个控制器所有接口都生效
@CrossOrigin(origins = "http://localhost:3000", allowCredentials = true) - 加在方法上:仅该接口生效,支持更灵活配置
@CrossOrigin(origins = {"https://a.com", "https://b.com"}, maxAge = 3600) - 注意:allowCredentials = true 时,origins 不能为 "*",必须指定明确域名,否则浏览器拒绝携带 Cookie
全局配置(统一管理、适合中大型项目)
继承 WebMvcConfigurationSupport,重写 addCorsMappings 方法:
- 配置路径匹配、允许来源、HTTP 方法、是否支持凭证等
registry.addMapping("/api/**")<br> .allowedOrigins("http://localhost:3000", "https://prod.example.com")<br> .allowCredentials(true)<br> .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")<br> .exposedHeaders("Authorization", "X-Total-Count"); - 确保该配置类被
@Configuration标记且能被 Spring 扫描到 - 若集成 Spring Security,需保证 CORS 配置早于安全过滤器执行(通常通过
@Order(Ordered.HIGHEST_PRECEDENCE)控制)
Filter 方式(兼容老版本、完全可控)
适用于 Servlet 环境,或需深度定制响应头的场景:
- 自定义 Filter 实现
javax.servlet.Filter - 在
doFilter中设置标准 CORS 头:response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");<br>response.setHeader("Access-Control-Allow-Credentials", "true");<br>response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");<br>response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); - 特别注意对 OPTIONS 预检请求 的处理:若请求是 OPTIONS,直接返回 200 并结束链路,避免落到后续处理器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










