持续创作,加速成长!这是我参与「掘金日新计划 · 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 Gateway
是SpringCloud
官方自己开发,自己维护的项目,后期的维护升级,都能自己操控。
Zuul
毕竟是netflix
公司的项目,虽说Zuul
2.0版本,会大改,底层改用netty。
但是呢,迟迟不出来,SpringCloud
官方等不及了,哥们自己搞了一套,可算不用看别人眼色了。
这就有了现在的SpringCloud Gateway
。
Zuul
也就渐渐的淡出舞台。真就验证了这一句:不进步,就终将被现实所抛弃。
所以,今天,我们就来谈谈SpringCloud Gateway
,在使用中遇见的一些常见问题吧!
SpringCloud Gateway
:官方文档
1.Webflux中动态定义应用程序中的安全 URL
很多时候,我们在开发过程中,定义了那些url
不进行权限
拦截,那些url
不进行xss
过滤,那些url
不进行crsf
拦截,
这些配置,可能在项目启动的时候,就需要我们定义好,就会帮我们加载这些配置。
但是,有这样的一些需求:
可不可以动态进行配置?可不可以动态开启呢?
那我们来看一下,如何进行动态定义应用程序中的安全 URL
。
我们可以在github找到答案:详情可见issue
可以看到,上面的
配置
,就是教我们怎么实现动态url
拦截。
- 那我们自己实现一下
这里,我们就可以通过
nacos
动态刷新配置的方式,动态刷新securityProperties
的配置。以实现,url的动态
url
拦截,是否开启,关闭,都可是动态配置了!!!
- 让配置生效
以上
config
,就让我们配置生效!!!
2.spring cloud gateway CORS 重复问题 The ‘Access-Control-Allow-Origin‘ header contains multiple values
详情可见csdn
出现这个问题,是我们的后端服务,和gateway服务,都增加了cors
跨域处理
后端服务
和网关服务
加了下面的配置:
这样,就导致了重复的:‘Access-Control-Allow-Origin‘ header
对于这样的问题,我们看到:官方文档
具体的处理方式,是
gateway
加上这段配置。
- 配置实现
配置好后,我们测试一下。
成功,完事!!!
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!