Spring Cloud Gateway 解决跨域问题
注:文中的解决方案在 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 解决跨域问题相关推荐
- 访问接口一直在报401问题Springboot和spring cloud gateway的跨域问题
最近在帮忙联调一个项目的接口,架构是别人搭建的,我只是帮忙联调业务. 打开之后发现昨天还好好的项目,现在调试起来全报401,因为是SpringCloud项目,zuul换成了gateway,因为gate ...
- 网关gateway解决跨域问题
Gateway 前言 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以 ...
- Spring @CrossOrigin 通配符 解决跨域问题
@CrossOrigin 通配符 解决跨域问题 痛点: 对很多api接口需要 开放H5 Ajax跨域请求支持 由于环境多套域名不同,而CrossOrigin 原生只支持* 或者具体域名的跨域支持 所以 ...
- 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式
文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...
- 前后端分离,解决Spring Cloud GateWay + Nacos使用lb请求报503错误以及403跨域问题
在使用前后端分离时,前端请求gateway接口,gateway使用lb负载均衡请求目标服务. 如下: spring:cloud:gateway:routes:- id: test-demouri: l ...
- 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway
作者:博云BoCloud| 前言 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用. ...
- spring cloud gateway跨域全局CORS配置
在Spring 5 Webflux中,配置CORS,可以通过自定义WebFilter实现: 注:此种写法需真实跨域访问,监控header中才会带相应属性. 代码实现方式 import org.spri ...
- 踩坑Gateway服务搭建、配置网关路由、路径重写和解决跨域问题(java类实现跨域)
由于项目需要,需要使用Gateway,话不多说直接干 引入依赖 <dependency><groupId>org.springframework.cloud</group ...
- spring cloud gateway中解决第一次请求失败的问题
spring cloud gateway中解决第一次请求失败的问题 参考文章: (1)spring cloud gateway中解决第一次请求失败的问题 (2)https://www.cnblogs. ...
最新文章
- 六种方式,教你在SpringBoot初始化时搞点事情!
- 基于STC8G1K17的信号转换方案
- ibatis代码生成器
- linux关机_Linux系统管理:开机启动流程(一)
- 并联串联混合的电压和电流_串、并联电路中的电流与电压规律
- J-LINK序列号修改
- ubuntu安装经常使用记录
- element-ui滚动条组件el-scrollbar
- volatile解析(转)
- 在麒麟OS新版本上,发现的几个问题
- 非合作博弈篇——非合作博弈论问题的表示(strategic form)
- Appium的工作原理
- let与var的区别(重点看例子)
- Linux压缩、解压、打包文件 修改文件所属组
- ImageView设置rounded corner
- MyBatis-Plus的使用
- 如何启用计算机上的摄像头,电脑如何打开摄像头
- 北京奥运会赛事电视直播表(绝对完整)--每天就抱着电视看吧!
- 牛客2023年情人节比赛 (c/c++题解)
- STM32F103 - 系统框架