小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
笔记
4、自定义Zuul过滤器实现登录鉴权实战
简介:自定义Zuul过滤器实现登录鉴权实战
1、新建一个filter包
2、新建一个类,实现ZuulFilter,重写里面的方法
3、在类顶部加注解,@Component,让Spring扫描
开始
比如下单接口,用户一定要登陆。要传一个token过来判断是否登陆,再去访问对应的接口
登陆的过滤器肯定在整个流程肯定里面最先处理。这里的pre Filters这里最先进行拦截。如果没登陆返回一个403。如果已经登陆,继续访问请求的接口
只需要对需要登陆的接口做限制和过滤即可。
新建Filter.在zuul的项目里。
先建个filter的包
自定义LoginFilter
首先需要继承ZuulFilter,
然后实现里面的方法
给这个类加上@Component注解让spring去扫描这个类
FilterType是过滤器的类型,登陆需要的是前置过滤器
所以设置为PRE_TYPE
order越小越先执行。
order设置为4
设置为true使这个过滤器生效
在这里我们获取到context对象,输出url地址。先测试一下
重启应用。访问测试。输出了URI和url
把常量放在前面,因为常量不可能为空。request.getRequestURI可能为空
这里改成/order/save
什么都没有打印
访问下单接口
访问product接口
没有被拦截
拦截到的操作
Unauthorized是401未授权
可以去搜索下jwt springboot的应用
重启应用测试,请求的时候一定要带token过来。
这里是不带token的测试
到断点这里。token是null值
最终返回null
页面返回了401状态码
在参数后面加上token的值
token可以获取到不为空了。
放行,最终把数据返回来了
把token放在header里面
最终放行
最终返回数据。
以上就是在网关里面做 用户登陆的鉴权
回顾
匹配的地址可以放在一个本地的缓存里面。
大项目用ACL的方式去做。小项目直接在代码里面写if else判断。多判断几个地址
然后我们就在zuulException里面定义校验逻辑