只要与当前浏览器访问的url不同(协议,域名,端口号),就会产生跨域。
方法1、通过配置文件解决
在GateWay配置文件中
spring:
cloud:
# gateway的配置
gateway:
# 跨域配置
globalcors:
cors-configurations:
'[/**]': # 允许跨域访问的资源
allowedOrigins: "*" #跨域允许来源
allowedHeaders: "*"
allowedMethods: "*"
allowCredentials: true
maxAge: 360000
正常情况下基于以上配置即可,但是由于目前的项目的下游微服务也配置了可以跨域的相关配置,这就导致返回的ResponseHeader中有多重属性,这个多重属性浏览器是不认的。所以基于此的处理方法,把下游的所有配置都取消,但是下游服务数量又太多,所以通过查询找到了以下的方案,参考https://github.com/spring-cloud/spring-cloud-gateway/issues/728
spring:
cloud:
# gateway的配置
gateway:
# 此处不注掉,会导致gateway转发websocket服务的时候出现自动断开的情况,报504错误
# discovery:
# locator:
# enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
# 跨域配置
globalcors:
cors-configurations:
'[/**]': # 允许跨域访问的资源
allowedOrigins: "*" #跨域允许来源
allowedHeaders: "*"
allowedMethods: "*"
allowCredentials: true
maxAge: 360000
# 加了以下配置会导致gateway转发websocket服务的时候出现自动断开的情况,报504错误
default-filters:
- DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
在配置文件中添加上面的过滤器,这个过滤器的作用是剔除重复的响应头。
方法2、通过配置类解决
import org.springframework.

本文详细介绍了如何在Spring Cloud Gateway中处理跨域问题,包括通过配置文件配置全局CORS策略,以及使用配置类自定义过滤器去除重复响应头。重点讲解了两种方法的实现细节和适用场景。
最低0.47元/天 解锁文章
756





