前言
简单介绍了关于
Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,我们就来了解下这方面的相关知识点。
一个请求会先按顺序通过所有的前置过滤器,之后在路由过滤器中转发给后端应用,得到响应后又会通过所有的后置过滤器,最后响应给客户端。在整个流程中如果发生了异常则会跳转到错误过滤器中。
一般来说,如果需要在请求到达后端应用前就进行处理的话,会选择
pre(前置过滤器),例如鉴权、请求转发、增加请求参数等行为。在请求完成后需要处理的操作放在(post)后置过滤器中完成,例如统计返回值和调用时间、记录日志、增加跨域头等行为。路由过滤器一般只需要选择 Zuul 中内置的即可,错误过滤器一般只需要一个,这样可以在遇到错误逻辑时直接抛出异常中断流程,并直接统一处理返回结果说下
error过滤器:pre、routing的任意一个阶段如果抛异常了,则执行error过滤器,然后再执行post给出响应。而post异常了,就直接调用error了。过滤器接口定义
知道了过滤器的定义,我们看看过滤器是怎么被定义的。查看类
com.netflix.zuul.ZuulFilter类,可知其个抽象类:
以下为需要实现的方法,其他具体的可自行查阅下//过滤器类型 String filterType(); //执行顺序 越小越先执行 int filterOrder(); //是否执行 返回false 不执行此过滤器 boolean shouldFilter(); //过滤器执行逻辑 Object run();具体说明下:
- filterType:该函数需要返回一个字符串来代表过滤器的类型,而这个类型就是在HTTP请求过程中定义的各个阶段。在Zuul中默认定义了四种不同生命周期的过滤器类型,具体如下:
- pre:可以在请求被路由之前调用。
- routing:在路由请求时候被调用。
- post:在routing和error过滤器之后被调用。
- error:处理请求时发生错误时被调用。
- filterOrder:通过int值来定义过滤器的执行顺序,数值越小优先级越高。
- shouldFilter:返回一个
boolean类型来判断该过滤器是否要执行。我们可以通过此方法来指定过滤器的有效范围。 - run:过滤器的具体逻辑。在该函数中,我们可以实现自定义的过滤逻辑,来确定是否要拦截当前的请求,不对其进行后续的路由,或是在请求路由返回结果之后,对处理结果做一些加工等。
所以,了解了过滤器抽象类的定义,自定义抽象类就简单了。
zuul自带过滤器
通过
IDE我们来看下已经实现ZuulFilter的过滤器类。具体的类在:
看看已经提供的过滤器:

可以看见,
Spring cloud zuul提供了很多过滤器,基本上就开箱即用了。简单说明下:类型 顺序 过滤器 功能 50000+5万行代码练就真实本领17年创办于2008年老牌培训机构1000+合作企业98%就业率- filterType:该函数需要返回一个字符串来代表过滤器的类型,而这个类型就是在HTTP请求过程中定义的各个阶段。在Zuul中默认定义了四种不同生命周期的过滤器类型,具体如下:
