Filter是Zuul的核心,用來實現對外服務的控制。Filter的生命週期有4個,分別是「PRE」、「ROUTING」、「POST」、「ERROR」,整個生命週期能夠用下圖來表示。後端
Zuul大部分功能都是經過過濾器來實現的,這些過濾器類型對應於請求的典型生命週期。app
類型 | 順序 | 過濾器 | 功能 |
---|---|---|---|
pre | -3 | ServletDetectionFilter | 標記處理Servlet的類型 |
pre | -2 | Servlet30WrapperFilter | 包裝HttpServletRequest請求 |
pre | -1 | FormBodyWrapperFilter | 包裝請求體 |
route | 1 | DebugFilter | 標記調試標誌 |
route | 5 | PreDecorationFilter | 處理請求上下文供後續使用 |
route | 10 | RibbonRoutingFilter | serviceId請求轉發 |
route | 100 | SimpleHostRoutingFilter | url請求轉發 |
route | 500 | SendForwardFilter | forward請求轉發 |
post | 0 | SendErrorFilter | 處理有錯誤的請求響應 |
post | 1000 | SendResponseFilter | 處理正常的請求響應 |
禁用指定的Filteride
能夠在application.yml中配置須要禁用的filter,格式:微服務
zuul: FormBodyWrapperFilter: pre: disable: true
實現自定義Filter,須要繼承ZuulFilter的類,並覆蓋其中的4個方法。post
public class MyFilter extends ZuulFilter { @Override String filterType() { return "pre"; //定義filter的類型,有pre、route、post、error四種 } @Override int filterOrder() { return 10; //定義filter的順序,數字越小表示順序越高,越先執行 } @Override boolean shouldFilter() { return true; //表示是否須要執行該filter,true表示執行,false表示不執行 } @Override Object run() { return null; //filter須要執行的具體操做 } }