SpringCloud中服务网关_Gateway跨域问题的出现以及解决方案

什么是Gateway

在微服务架构Springf Cloud庞大的体系中,网关Gateway起着不可或缺的作用,目前很多项目都是采用前后端分离的架构,前端需要配置接口路径,当业务功能繁多的时候,接口路径也会特别多,这时我们可以配置GateWay来减轻前端工程师的压力。

Gateway中的三大核心概念:路由、断言、过滤器

路由:由id,uri,断言predicates组成
断言::路由的匹配规则
过滤器: 在进入路由前后对请求进行修改

首先客户端发送的任何请求,网关都会把它们拦住。根据请求的URL不同分配到不同的路由上,路由中有断言,会对请求的url进行匹配,匹配成功返回true否则返回false,匹配断言成功后后进入路由,之后会有一系列的过滤器全局过滤器GlobalFilter网关过滤器GatewayFilter对请求进行修改。具体怎么修改需要看业务场景。

什么是跨域?

当一个请求与当前页面的URL、域名、端口不同时会出现跨域问题
举个例子吧:

当前页面地址被请求页面地址是否跨域原因
http://www.test.com/index.htmlhttp://www.test.com/index.html同源相同
http://www.baidu.com/https://www.test.com/协议不同
http://www.baidu.com/http://www.test.com/主域名不同
http://www.test.com/http://flag.test.com/子域名不同
http://www.baidu.com/http://www.test.com:8080/端口不同

跨域问题展示

可以看到当前页面的url为http://localhost:63342/cloud/cloud-gateway-9527/index.html?_ijt=58f0nf0tl6j2e5bn173ph5ajg
被请求页面的url为http://localhost:9527/payment/这很明显是端口不同出现了跨域问题
在这里插入图片描述

当报错信息为XMLHttpRequest或者No 'Access-Control-Allow-Origin' 不用怀疑就是出现了跨域
请添加图片描述 请添加图片描述

如何解决跨域?

常见的用于解决跨域问题的方法就是CORS了,相信学过Spring Security的朋友对CORS并不陌生

拓展:
在做后台管理系统时实现权限控制与安全认证会用到Spring Security在Spring Security·的配置类中添加http.cors();也就是开启跨域访问还有http.csrf().disable();关闭csrf防护

CORS是跨域资源共享,是解决跨域问题很好的一种解决方案
只需在application.yml文件加入以下配置即可,application.properties文件也是这段配置,但需要遵循指定的编码风格

spring:
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allowCredentials: true
            allowedOriginPatterns: "*"
            allowedMethods: "*"
            allowedHeaders: "*"
        add-to-simple-url-handler-mapping: true

可以看到页面可以正常访问了也不会报跨域的错误了
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿晓晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值