SpringMvc跨域配置方法详解

在 Spring MVC 中,通过 CorsRegistry.addMapping() 返回的 CorsRegistration 对象提供了以下方法用于配置跨域属性(基于 Spring Framework 5.x/6.x):

核心配置方法:

  1. allowedOrigins(String... origins)

    • 设置允许的源(协议+域名+端口)
    • 示例:.allowedOrigins("https://example.com", "http://localhost:8080")
    • 特殊值:"*" 允许所有源(与 allowCredentials(true) 互斥)
  2. allowedOriginPatterns(String... patterns)(Spring 5.3+)

    • 使用通配符模式匹配源(更灵活)
    • 示例:.allowedOriginPatterns("https://*.example.com", "http://localhost:*")
  3. allowedMethods(String... methods)

    • 设置允许的 HTTP 方法(GET/POST 等)
    • 示例:.allowedMethods("GET", "POST", "PUT")
    • 特殊值:"*" 允许所有方法
  4. allowedHeaders(String... headers)

    • 设置允许的请求头
    • 示例:.allowedHeaders("Authorization", "Content-Type")
    • 特殊值:"*" 允许所有头(实际请求头需显式列出)
  5. exposedHeaders(String... headers)

    • 设置浏览器可访问的响应头
    • 示例:.exposedHeaders("X-Custom-Header", "Content-Disposition")
  6. allowCredentials(Boolean allowCredentials)

    • 是否允许发送 Cookie/HTTP 认证
    • 示例:.allowCredentials(true)
    • 重要 :设为 true 时,allowedOrigins/originPatterns 不能为 "*"
  7. maxAge(Long maxAge)

    • 设置预检请求(OPTIONS)的缓存时间(秒)
    • 示例:.maxAge(1800)(缓存 30 分钟)

完整配置示例:

java 复制代码
@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/api/**")
        .allowedOriginPatterns("https://*.example.com", "http://localhost:*")
        .allowedMethods("GET", "POST", "PUT", "DELETE")
        .allowedHeaders("Authorization", "Content-Type", "X-Requested-With")
        .exposedHeaders("X-Custom-Header", "Content-Length")
        .allowCredentials(true)
        .maxAge(3600); // 1小时缓存
}

关键注意事项:

  1. addMapping 路径匹配:

    • registry.addMapping("/**"):匹配所有路径
    • registry.addMapping("/api/**"):匹配 /api 开头的路径
  2. 优先级规则:

    • 更具体的路径映射优先级高于通配符路径
    • 示例:/api/users/** 的配置会覆盖 /api/** 的配置
  3. allowedHeaders("*") 的限制:

    • 实际允许的头不包括 "*",需显式列出所有头(如 Authorization 等)
    • 安全建议:避免使用 "*",明确指定所需头
  4. allowCredentials(true) 的安全约束:

    • 必须与具体的 allowedOrigins/originPatterns 配合使用
    • 禁止与 allowedOrigins("*") 组合(浏览器会阻止)

提示 :Spring Boot 2.4+ 推荐使用 allowedOriginPatterns 替代 allowedOrigins,因其支持更灵活的域匹配模式。

相关推荐
软件技术NINI3 小时前
基于SpringBoot和Vue的摇滚乐鉴赏网站
vue.js·spring boot·后端·spring·html·毕业设计·毕设
一枕槐安48719 小时前
RAG 服务扛住高并发:缓存、队列、限流三件套
java·spring·缓存·异步任务·rag·断路器
YDS8291 天前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
雷一言说1 天前
Spring AI 2.0 Modular RAG:接入 Rerank 重排模型
spring
学到老活到老1 天前
第 22 集:Filter、Interceptor、AOP 都能拦截,为什么不能互换?
java·后端·spring
郭小李1 天前
spring 中的 @EnableWebMvc注解和WebMvcConfigurer接口
java·后端·spring
CoderYanger1 天前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
霸道流氓气质1 天前
AI 翻译插件:翻译记忆级联复用、术语混合检索与结构化质量门禁的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
霸道流氓气质1 天前
智能表单生成器:结构化输出契约、JSON Schema 驱动渲染与 EAV/JSONB 混合存储的 Vue3 + Spring AI 生产级实战
人工智能·spring·json
java_nnnn1 天前
spring web mvc图书管理小案例
前端·spring·mvc