Spring Cloud Gateway 解决跨域问题

这篇具有很好参考价值的文章主要介绍了Spring Cloud Gateway 解决跨域问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

  请求流程如下图:通过nginx反向代理到网关,在通过网关转发到具体的服务上
Spring Cloud Gateway 解决跨域问题
  关于跨域的理论百度上已经有很多,网关到其他服务主要是通过注册中心去找的服务名在进行转发,所以不存在跨域,主要是解决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");

    @Bean
    public 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); // 是否发送cookie
        config.addAllowedMethod("*"); // 放行请求方式
        config.addExposedHeader("*"); // 暴露头部信息
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}
方案一:Gateway yaml 配置

  Gateway 也提供了跨域的配置类,可以直接在yaml中进行配置,具体的类配置可以查看源码 org.springframework.cloud.gateway.config.GlobalCorsProperties文章来源地址https://www.toymoban.com/news/detail-505751.html

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 # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期

到了这里,关于Spring Cloud Gateway 解决跨域问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 中的 Spring Cloud Gateway

    Spring Cloud Gateway 是一个基于 Spring Boot 的网关框架,它提供了一种统一的入口,将所有的请求路由到不同的后端服务中。Spring Cloud Gateway 采用了 Reactive 编程模型,可以处理大量并发请求,同时还具备负载均衡、熔断、限流等功能。本文将介绍 Spring Cloud Gateway 的原理和使用方法

    2024年02月12日
    浏览(36)
  • Spring Security系列教程之解决Spring Security环境中的跨域问题

    一. 启用Spring Security 的CORS支持 1. 普通的跨域 方式1:在接口方法上利用@CrossOrigin注解解决跨域问题 方式2:通过实现WebMvcConfigurer接口来解决跨域问题 二. Spring Security环境下的跨域问题解决 通过上面的配置,我们已经解决了Ajax的跨域请求问题,但是这个案例中也有潜在的威胁

    2024年02月05日
    浏览(32)
  • 解决Spring Boot前后端分离开发模式中的跨域问题

    在实际开发中,经常会遇到前端Vue应用与后端Spring Boot API接口存在跨域访问的问题。本篇博客将分享解决Spring Boot前端Vue跨域问题的实战经验,帮助开发者快速解决该问题。 跨域问题是由于浏览器的同源策略引起的。同源策略限制了从一个源加载的文档或脚本如何与来自另一

    2024年02月10日
    浏览(32)
  • 解决gateway跨域问题

    只要与当前浏览器访问的url不同(协议,域名,端口号),就会产生跨域。 1. 配置文件解决,在gateway的配置文件中 注:要加上最下边的配置,不然浏览器还是会报跨域问题,因为浏览器 Vary  和  Access-Control-Allow-Origin  两个头重复了两次,其中浏览器对后者有唯一性限制!

    2024年02月12日
    浏览(29)
  • 跨域问题以及在springcloud的gateway中解决跨域问题

    跨域问题: 当两个页面的 域名不一致时, 浏览器禁止 请求的发起者与服务端发生跨域 ajax请求 ,请求被浏览器拦截的问题 。 发生跨域问题需要满足的点有:1.两个页面的域名不一致 2.两个页面发生的是ajax请求。 这里不允许跨域是 浏览器禁止的 ! 域名不一致包括 域名不同

    2024年02月16日
    浏览(27)
  • Spring Cloud 轻松解决跨域,别再乱用了!

    在Spring Cloud项目中,前后端分离目前很常见,在调试时,会遇到两种情况的跨域: 前端页面通过不同域名或IP访问微服务的后台,例如前端人员会在本地起HttpServer 直连后台开发本地起的服务,此时,如果不加任何配置,前端页面的请求会被浏览器跨域限制拦截,所以,业务

    2024年02月08日
    浏览(32)
  • SpringCloud Gateway解决CROS跨域问题

    目录 一、问题 二、原因 二、解决方法 1、gateway设置允许跨域 2、手动写一个 CorsResponseHeaderFilter 的 GlobalFilter 去修改Response中的头 前端代码访问后端代码时候会出现   这种报错,前端会显示 不允许有多个’Access-Control-Allow-Origin’ CORS头 仔细查看返回的响应头,里面包含了

    2024年01月19日
    浏览(45)
  • 关于spring cloud gateway中出现503 Service Unavailable的问题

    1.引用spring cloud gateway+nacos配置中心 2.微服务+分布式(本节与分布式问题无关)项目 3.路由规则:网关端口:8085;第三方端口:8081,8086 第三方单独访问路径localhost:8081/test/getUserTest?id=2 希望路由到:localhost:consumer-service/test/getUserTest?id=2 (这里我写了两个消费者服务,服务名一致

    2024年02月01日
    浏览(35)
  • 优化 spring cloud gateway+nacos时服务恢复调用太慢问题

    问题描述 在使用 spring cloud gateway + nacos 做服务发现时,会发现当下游的服务器恢复了,但是还有经过一段时间 gateway 才成功转发请求到刚恢复的下游服务上。于是我就深入源码进行企图通过修改相关配置的方式优化gateway服务发现的恢复时间。 相关依赖版本 源码 经过漫长的

    2024年02月01日
    浏览(35)
  • skywalking-agent-java默认不支持spring cloud gateway问题

    开发环境:Windows10 、JDK17 skywalking官网下载地址:https://skywalking.apache.org/downloads/ 解压目录为:D:Programssoft-Pluginsapache-skywalking-java-agent-8.16.0skywalking-agent 解压后目录结构为: 可参考官网博客文档:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/#232-idea 我的IDEA版本: Int

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包