注:文中的解决方案在 Spring Cloud 2021.0.4、Spring Boot 2.7.4 版本中得到验证,完美解决,其他版本可参考

  请求流程如下图:通过nginx反向代理到网关,在通过网关转发到具体的服务上

  关于跨域的理论百度上已经有很多,网关到其他服务主要是通过注册中心去找的服务名在进行转发,所以不存在跨域,主要是解决nginx到网关的跨域问题

方案一:网关配置类

  在网关模块注入跨域配置

@Configuration
public class GlobalCorsConfig {/*** 为了安全,建议只放行需要的地址(可以再yaml中定义进行映射方便扩展)*/private List<String> sourceCors = Arrays.asList("http://localhost:8001", "http://localhost:8002", "http://localhost:8003");private List<String> methods = Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS");@Beanpublic CorsWebFilter corsWebFilter() {CorsConfiguration config = new CorsConfiguration();// 放行原始域if (CollectionUtils.isEmpty(sourceCors)) {config.addAllowedOrigin("*"); // 放行所有} else {for (String sourceCor : sourceCors) {config.addAllowedOrigin(sourceCor);}}// 放行请求头if (CollectionUtils.isEmpty(methods)) {config.addAllowedHeader("*"); // 放行所有} else {for (String method : methods) {config.addAllowedHeader(method);}}config.setAllowCredentials(true); // 是否发送cookieconfig.addAllowedMethod("*"); // 放行请求方式config.addExposedHeader("*"); // 暴露头部信息UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

方案一:Gateway yaml 配置

  Gateway 也提供了跨域的配置类,可以直接在yaml中进行配置,具体的类配置可以查看源码 org.springframework.cloud.gateway.config.GlobalCorsProperties

spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求 allowedOrigins: “*” 允许所有网站- "https://localhost:8001"- "https://localhost:8002"- "https://localhost:8003"allowedMethods: # 允许的跨域ajax的请求方式 “*” 允许所有- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

Spring Cloud Gateway 解决跨域问题相关推荐

  1. 访问接口一直在报401问题Springboot和spring cloud gateway的跨域问题

    最近在帮忙联调一个项目的接口,架构是别人搭建的,我只是帮忙联调业务. 打开之后发现昨天还好好的项目,现在调试起来全报401,因为是SpringCloud项目,zuul换成了gateway,因为gate ...

  2. 网关gateway解决跨域问题

    Gateway 前言 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以 ...

  3. Spring @CrossOrigin 通配符 解决跨域问题

    @CrossOrigin 通配符 解决跨域问题 痛点: 对很多api接口需要 开放H5 Ajax跨域请求支持 由于环境多套域名不同,而CrossOrigin 原生只支持* 或者具体域名的跨域支持 所以 ...

  4. 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式

    文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...

  5. 前后端分离,解决Spring Cloud GateWay + Nacos使用lb请求报503错误以及403跨域问题

    在使用前后端分离时,前端请求gateway接口,gateway使用lb负载均衡请求目标服务. 如下: spring:cloud:gateway:routes:- id: test-demouri: l ...

  6. 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway

    作者:博云BoCloud| 前言 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用. ...

  7. spring cloud gateway跨域全局CORS配置

    在Spring 5 Webflux中,配置CORS,可以通过自定义WebFilter实现: 注:此种写法需真实跨域访问,监控header中才会带相应属性. 代码实现方式 import org.spri ...

  8. 踩坑Gateway服务搭建、配置网关路由、路径重写和解决跨域问题(java类实现跨域)

    由于项目需要,需要使用Gateway,话不多说直接干 引入依赖 <dependency><groupId>org.springframework.cloud</group ...

  9. spring cloud gateway中解决第一次请求失败的问题

    spring cloud gateway中解决第一次请求失败的问题 参考文章: (1)spring cloud gateway中解决第一次请求失败的问题 (2)https://www.cnblogs. ...

最新文章

  1. 六种方式,教你在SpringBoot初始化时搞点事情!
  2. 基于STC8G1K17的信号转换方案
  3. ibatis代码生成器
  4. linux关机_Linux系统管理:开机启动流程(一)
  5. 并联串联混合的电压和电流_串、并联电路中的电流与电压规律
  6. J-LINK序列号修改
  7. ubuntu安装经常使用记录
  8. element-ui滚动条组件el-scrollbar
  9. volatile解析(转)
  10. 在麒麟OS新版本上,发现的几个问题
  11. 非合作博弈篇——非合作博弈论问题的表示(strategic form)
  12. Appium的工作原理
  13. let与var的区别(重点看例子)
  14. Linux压缩、解压、打包文件 修改文件所属组
  15. ImageView设置rounded corner
  16. MyBatis-Plus的使用
  17. 如何启用计算机上的摄像头,电脑如何打开摄像头
  18. 北京奥运会赛事电视直播表(绝对完整)--每天就抱着电视看吧!
  19. 牛客2023年情人节比赛 (c/c++题解)
  20. STM32F103 - 系统框架

热门文章

  1. tooth的用法_tooth的复数形式
  2. 大物下(大学物理知识点回顾与典型题解析
  3. webpack打包路径更改_webpack打包教程
  4. 面试一次问一次,HashMap是该拿下了(一)
  5. 2017CCPC中南地区赛暨湘潭大学邀请赛总结
  6. 根据ebp/rbp/fp获取backtrace
  7. 【Django】admin.ModelAdmin的源码-20220105
  8. spring boot+vue前后端分离项目问题总结
  9. JavaScript实战操作(DOM,BOM)
  10. 每日一课 | SQL模糊查找