Spring Cloud Zuul 作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。Spring Cloud Zuul 除了可以实现请求的路由功能,还有一个重要的功能就是过滤器。Zuul 的路由功能让所有的微服务提供的接口有统一的网关入口,但并不是所有的接口都是对外完全开发的,它们的访问权限一般都有一定的限制。我们可以在每个服务上对应的权限校验及其他的一些校验,而这些校验通常都是通过过滤器来完成的.一个应用的各个服务的校验大部分都是相似的逻辑,如果每个服务都写一遍逻辑校验的话,会显得代码比较频繁,而且维护也不方便.
为了减少体力代码的出现和后期维护时的方便,我们一般会将这些校验搬到前端发来请求的最前端来做统一的处理,而统一的API服务网关zuul就是最合适的选择.
Zuul 可以通过定义过滤器来实现请求的拦截和过滤,而它本身的大部分功能也是通过过滤器实现的.
举个例子,用户服务提供一个登录接口,用户名密码正确后返回一个Token,此Token作为用户服务的通行证,那么用户登录成功后返回的Token就需要进行加密或者防止篡改处理。在到达用户服务其他接口前,就需要对Token进行校验,非法的Token就不需要转发到用户服务中了,直接在网关层返回信息即可。
要修改服务返回的信息,需要使用的是Zuul的过滤器。使用时只需要继承ZuulFilter,实现必要的方法即可。
1.设置过滤器的类型
2.通过filterOrder方法返回的int值来对过滤器定义执行顺序,数字越大的话,优先级越低.
3.执行过滤器的条件
-
如果是登录,不执行 run()方法,要求shouldFilter()返回false
-
如果不是登录,需要执行run()方法,要求shouldFilter()返回true
4.过滤的业务逻辑
这就是小喵对Zuul的一些理解,不知道是否正确!
如有不足,希望大家留言,帮助小喵理解,小喵在这谢谢了
(^_^)~喵~!!