springcloud 跨域问题解决

发布时间 2023-08-31 18:10:31作者: Frodo1124

问题原因

跨域本质是浏览器基于同源策略的一种安全手段

同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能

所谓同源(即指在同一个域)具有以下三个相同点

  • 协议相同(protocol)
  • 主机相同(host)
  • 端口相同(port)

反之非同源请求,也就是协议、端口、主机其中一项不相同的时候,这时候就会产生跨域

一定要注意跨域是浏览器的限制,你用抓包工具抓取接口数据,是可以看到接口已经把数据返回回来了,只是浏览器的限制,你获取不到数据。用postman请求接口能够请求到数据。这些再次印证了跨域是浏览器的限制。

解决

方法一

在 gateay 模块的 application.properties 文件中添加

# 全局跨域配置
# 允许跨域的域名
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns=*
# 允许跨域的请求头
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders=*
# 允许跨域的请求方法
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods=*
# 是否允许携带cookie
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials=true
# 跨域请求检测的有效期,单位为秒
spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge=3600

方法二

在对应的 Controller 类或方法头上一行添加 @CrossOrigin