之前在《每天10分钟玩转Spring Cloud基础》课程中介绍了Zuul实现API Gateway。通过对Zuul的配置来将请求路由到指定的微服务。课程中也提到,微服务框架中的权限和服务的限流等都需要在网关层来实现,让具体的服务可以更加专注其业务的开发。本篇介绍Zuul实现权限认证的功能。
目前开源的安全认证产品中以Spring Security和Apache Shiro最为常用,其中Shiro比Spring Security更加轻量级一些。但如果业务场景并不复杂,也无需复杂的架构,那么手写一个ZuulFitler也可以解决很多的问题。
通过继承com.netflix.zuul.ZuulFilter这个抽象类,实现其中的抽象方法就可以完成微服务框架的权限认证。
创建LoginFilter
1、 新建LoginFilter类,继承ZuulFilter。并实现其中的filterType、filterOrder、shouldFilter、run方法
2、 filterType中的存在4中过滤类型
2.1、pre:在请求被路由之前调用。
2.2、route:将请求路由到微服务。
2.3、post:在请求被路由到微服务之后调用。
2.4、error:在发生错误时被调用。
3、 filterOrder中的数字是过滤器的执行顺序,数字越小执行顺序越靠前。
4、 shouldFilter返回布尔值,返回true是需要权限校验,反之不需要。
5、 run是具体的过滤器的规则,本例中使用从header或parameter中获取token字符串来判断校验是否通过。
测试
启动Eureka Server、workflow-service和gateway-zuul三个服务,使用postman进行测试。
1、 先不输入token。
2、 输入token。
输入token后,请求被路由到了/workflow/getWorkflow这个地址上。实现了权限验证的功能。