SpringBoot 跨域报错
2026/6/9 21:24:22 网站建设 项目流程

跨域问题产生的原因

2. 违反安全规范

W3C 的 CORS 规范和各大安全审计标准(如 OWASP)都明确指出:

  • 🛡️ 核心原因:防止敏感数据泄露

    当你配置allowedOriginPatterns("*")并且允许凭据(allowCredentials=true)时,你实际上是在告诉浏览器:

    任何网站都可以向我的服务器发送请求,并且可以携带用户的登录信息(Cookie)。”

    这会带来严重的安全隐患:

    1. 跨站请求伪造 (CSRF) 与数据窃取

    如果生产环境允许所有域名(*)携带凭据访问,攻击者可以制作一个恶意网页(例如通过钓鱼邮件诱导你打开):

  • 攻击原理:恶意网页中的 JavaScript 代码会利用你的浏览器(此时你可能已经登录了公司的内部系统)向你的 API 服务器发送请求。
  • 后果:因为服务器配置了*,浏览器会允许这个跨域请求,并自动带上你的 Cookie。服务器收到请求后,误以为是你本人在操作,就会返回敏感数据(如用户资料、订单信息等)给恶意网站。
  • 结果:用户的隐私数据被窃取,甚至账户被恶意操作。
  • Access-Control-Allow-Credentials: true时,Access-Control-Allow-Origin绝对不能*
  • 必须显式指定具体的域名,以确保信任边界清晰。

SpringBoot 中常见的跨域报错

  • 前端控制台报错示例

解决方案:全局 CORS 配置

📊 代码参数与 HTTP 头的映射

为了让你更直观地看到代码是如何变成 HTTP 协议的,整理了这个对应表:

你的代码配置生成的 HTTP 响应头作用说明
.allowedOriginPatterns("*")Access-Control-Allow-Origin: *允许任何域名访问资源
.allowedMethods("GET", "POST"...)Access-Control-Allow-Methods: ...告诉浏览器允许使用的 HTTP 动词
.allowedHeaders("*")Access-Control-Allow-Headers: ...允许请求中携带的自定义头字段
.allowCredentials(true)Access-Control-Allow-Credentials: true允许携带 Cookie 或认证信息
.maxAge(3600)Access-Control-Max-Age: 3600预检请求缓存 1 小时,减少重复 OPTIONS 请求
  • 使用WebMvcConfigurer配置全局跨域
  • 示例代码:
    @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE"); } }
最佳实践建议
  • 生产环境避免使用*通配符
  • 结合具体业务限制allowedOrigins
  • 使用allowedHeaders精细化控制

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询