Gateway网关常见的一些问题解决

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情


写在前面

很多时候,我们用SpringCloud微服务搭建的框架中,我们一般都会选择用SpringCloud Gateway作为我们的网关层。

对于前几年,我们一般会使用Zuul作为网关层!!!

但是呢,Zuul是netflix公司的项目,底层本质上是web servlet,基于JavaEE Servlet技术栈,使用阻塞API,处理的是http请求,没有提供异步支持,不支持任何长连接,比如websocket

所以在性能上,会存在一定的问题。但是也可以通过参数优化提高性能理论上可以达到极限性能。

SpringCloud Gateway,底层使用的是Spring Webflux提供的Netty底层环境,使用非阻塞API,使用的是异步io,支持websocket。

这样一来,SpringCloud Gateway,不需优化既可以达到接近极限的性能。

而且,最主要的问题是:SpringCloud GatewaySpringCloud官方自己开发,自己维护的项目,后期的维护升级,都能自己操控。

Zuul毕竟是netflix公司的项目,虽说Zuul2.0版本,会大改,底层改用netty。

但是呢,迟迟不出来,SpringCloud官方等不及了,哥们自己搞了一套,可算不用看别人眼色了。

这就有了现在的SpringCloud Gateway

image-20220526140234635.png

Zuul也就渐渐的淡出舞台。真就验证了这一句:不进步,就终将被现实所抛弃。

所以,今天,我们就来谈谈SpringCloud Gateway,在使用中遇见的一些常见问题吧!

SpringCloud Gateway官方文档


1.Webflux中动态定义应用程序中的安全 URL

很多时候,我们在开发过程中,定义了那些url不进行权限拦截,那些url不进行xss过滤,那些url不进行crsf拦截,

这些配置,可能在项目启动的时候,就需要我们定义好,就会帮我们加载这些配置。

但是,有这样的一些需求:

可不可以动态进行配置?可不可以动态开启呢?

那我们来看一下,如何进行动态定义应用程序中的安全 URL

我们可以在github找到答案:详情可见issue

image.png

可以看到,上面的配置,就是教我们怎么实现动态url拦截。

  • 那我们自己实现一下

image.png

这里,我们就可以通过nacos动态刷新配置的方式,动态刷新securityProperties的配置。

以实现,url的动态url拦截,是否开启,关闭,都可是动态配置了!!!

  • 让配置生效

image.png

以上config,就让我们配置生效!!!


2.spring cloud gateway CORS 重复问题 The ‘Access-Control-Allow-Origin‘ header contains multiple values

详情可见csdn

出现这个问题,是我们的后端服务,和gateway服务,都增加了cors跨域处理

后端服务网关服务加了下面的配置:

image.png

这样,就导致了重复的:‘Access-Control-Allow-Origin‘ header

对于这样的问题,我们看到:官方文档

image.png

具体的处理方式,是gateway加上这段配置。

  • 配置实现

image.png

配置好后,我们测试一下。

成功,完事!!!

image-20220526140234635.png

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png

猜你喜欢

转载自juejin.im/post/7105969323142807560