抛开zuul将自定义以及默认filter初始化到FilterRegistry的ConcurrentHashMap中不谈,记录一下zuul的过滤器执行顺序。
1.在ZuulServlet类中的service方法,先给请求创建一个线程局部变量“RequestContext”,其生命周期结束时间为“post”类型的zuul执行完毕之后。
2.首先执行pre类型的filter(默认的pre filter主要做了一些请求的预处理),
从ConcurrentHashMap中获取类型为pre的filter,然后遍历执行。
3.执行route类型的filter(逻辑和pre的类似),默认了几个重要的route的filter,用以实现路由功能:默认的filter如下:RibbonRoutingFilter :10、SimpleHostRoutingFilter:100、SendForwardFilter:500。
4.在所有的route类型的filter执行完毕后,才开始执行post类型的filter。
5.filter报错后执行error类型的filiter。
6.默认的filter可以通过配置去掉:
zuul:
FormBodyWrapperFilter: #filterNane
pre: #filter类型
disable: true
去掉之后,可以用自己自定义的filter取代,以实现自己的特定需求