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

相关推荐
Chan166 小时前
【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能
java·人工智能·spring boot·后端·spring·ai·ai作画
Olrookie11 小时前
若依前后端分离版学习笔记(五)——Spring Boot简介与Spring Security
笔记·后端·学习·spring·ruoyi
dylan_QAQ12 小时前
【附录】Spring容器的启动过程是怎样的?
后端·spring
Alt.912 小时前
SpringMVC(一)
java·mvc
埃泽漫笔13 小时前
Spring 的 ioc 控制反转
java·spring·ioc
太阳之神aboluo13 小时前
SpringCloud (4) 分布式事务
java·spring·spring cloud
三木水17 小时前
Spring-rabbit使用实战六
java·后端·spring·消息队列·java-rabbitmq
录大大i17 小时前
Druid与JdbcTemplate基本使用
java·spring
丶小鱼丶17 小时前
Spring之【详解FactoryBean】
java·spring