zuul的动态路由 + zuul简单认证

zuul的动态路由

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


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




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



数据库中的路由设定



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



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



zuul简单认证

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


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



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

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

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

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



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



登录展示



校验token



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



代码仓库

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





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

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

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

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

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




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

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

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



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值