gateway-過濾器執行順序


請求進入網關會碰到三類過濾器:當前路由過濾器、DefaultFilter、GlobalFilter。

請求路由后,會將當前路由過濾器和DefaultFilter、GlobalFilter,合並到一個過濾器鏈(集合)中,排序后依次執行每個過濾器

 

過濾器執行順序
1.每一個過濾器都必須指定一個int類型的order值,order值越小,優先級越高,執行順序越靠前。
2.GlobalFilter通過實現Ordered接口,或者添加@Order注解來指定order值,由我們自己指定
3.路由過濾器和defaultFilter的order由Spring指定,默認是按照聲明順序從1遞增。

default-filters: - AddRequestHeader=Truth,lisi is freaking awesome! #ordered 1
  - AddXxxxHeader=Truth,lisi is freaking awesome! #ordered 2


4.當過濾器的order值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter的順序執行。

可以參考下面幾個類的源碼來查看:
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加載defaultFilters,然后再加載某個route的filters,然后合並。

org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法會加載全局過濾器,與前面的過濾器合並后根據order排序,組織過濾器鏈

總結
路由過濾器、defaultFilter、全局過濾器的執行順序?
1.order值越小,優先級越高
2.當order值一樣時,順序是defaultFilter最先,然后是局部的路由過濾器,最后是全局過濾器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM