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,因其支持更灵活的域匹配模式。

相关推荐
鱼宵10 分钟前
Spring AI 初体验:配好 yml 就能聊,ChatClient 四步链式调用
人工智能·spring·microsoft·大模型·springai·chatclient
endswel35 分钟前
Spring bean 注册多种方式
java·后端·spring
imDwAaY2 小时前
Spring中过滤器和拦截器的区别是什么?
spring boot·后端·spring
桃西西呀3 小时前
Spring AI Alibaba 之二:Spring AI 底座与原子抽象一笔带过,看清 SAA 在之上加了什么编排
人工智能·spring·llm
写后端的胖头鱼4 小时前
一文详解Spring 事务失效场景
java·spring·事务·transactional·事务传播机制
Q26433650234 小时前
【有源码】基于Spring Boot和Vue的在线考试与交流系统-教育信息化背景下在线考试与交流一体化平台
java·vue.js·spring boot·mysql·spring·毕业设计·课程设计
会编程的吕洞宾4 小时前
Spring AI 2.0 会话记忆实战,让 AI 助手记住每一次对话
java·人工智能·spring
小宋10214 小时前
Agent 工具升级如何不破坏线上:Tool Schema 版本兼容与契约测试
java·人工智能·后端·spring
EatFan4 小时前
2026 后端 AI 集成三条落地路径:Spring AI 2.0、MCP 协议与旁路服务怎么选
java·人工智能·spring boot·spring·大模型·spring ai·mcp