zuul的动态路由

主要继承以下的类,重写locateRoutes方法

Portal认证采用动态授权VLAN_数据库


在方法中加入自己的获取路由的方式 ,我这里是基于数据库配置

Portal认证采用动态授权VLAN_zuul_02

Portal认证采用动态授权VLAN_数据库_03


写完后注册到springioc容器中,这样zuul就会从数据库中获取路由的配置信息,手动刷新的需要调用zuul内部的事件通知机制来让zuul刷新配置

Portal认证采用动态授权VLAN_zuul_04


数据库中的路由设定

Portal认证采用动态授权VLAN_zuul_05


请求ccc/hello 转发到了client服务的hello上

Portal认证采用动态授权VLAN_数据库_06


调用刷新方法,会直接刷新配置

Portal认证采用动态授权VLAN_spring_07


zuul简单认证


首先要创建一个认证授权服务


Portal认证采用动态授权VLAN_springcloud_08


暂时不用shiro或者springsecurity,直接判定输入的用户名或者密码是否正确

Portal认证采用动态授权VLAN_zuul_09


返回的token就直接使用base64简单加密一下,过期之类的先不加入。接下来在zuul中加入pre过滤器,认证的主要逻辑如下

1、如果是 auth/login 请求则进行参数校验后放过

2、如果是 auth/check 请求也进行参数校验后放过

3、其他的请求需要进行token校验

Portal认证采用动态授权VLAN_zuul_10


这里之后肯定要加入缓存,不然每次请求太耗时了,不利于高并发,最后注入spring容器中

Portal认证采用动态授权VLAN_spring_11


登录展示

Portal认证采用动态授权VLAN_数据库_12


校验token

Portal认证采用动态授权VLAN_数据库_13


请求时放在header中然后做认证校验

Portal认证采用动态授权VLAN_数据库_14


代码仓库

https://github.com/cdy1996/sample-springcloud/tree/zuul-dymamic





-----------------------------------------------

这边提一下我配置动态网关时出现的状况

1、加载数据库会加载两边

2、每30秒就会自动加载,即不需要自己调用刷新接口

那么这2个问题很简单,因为我们把zuul注册在eureka上,那么它每30秒就会去eureka的服务其上拉取数据,拉到后刚好也会触发刷新的接口,且zuul有两个事件监听器会触发我们配置的接口zuulRefreshListener和zuulDiscoverRefreshListener,具体触发时的栈可以看下面两张图,至于为什么又这两个监听器,我还未开始看源码,等我看了源码在告诉大家,或者有高人可以提前给我剧透一下。

Portal认证采用动态授权VLAN_spring_15

Portal认证采用动态授权VLAN_spring_16


3、如何配置serviceId对应的动态路由

这个问题可以很明确的,因为我们创建的实体类中有url也有serviceId,所以很明确是支持的,但是前提是我们的zuul要注册在erueka上,但是这样就会出项上面两个问题,如果想要彻底解决问题,还是建议通过springcloud config+spring bus来达到动态路由,自己来实现的话可能要对其源码非常熟知,难度较大(个人看法,大牛勿喷)。

最后附上用serviceId的路由配置,没有测试同时配置serivceId和url,应该会有个优先

Portal认证采用动态授权VLAN_springcloud_17

Portal认证采用动态授权VLAN_springcloud_18