Spring Cloud Gateway除了具備請求路由功能之外,也支持對請求的過濾。通過Zuul網關類似,也是通過過濾器的形式來實現的。那么接下來我們一起來研究一下Gateway中的過濾器
過濾器基礎
(1) 過濾器的生命周期
Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么豐富,它只有兩個:“pre” 和 “post”:
PRE: 這種過濾器在請求被路由之前調用。我們可利用這種過濾器實現身份驗證、在集群中選擇請求的微服務、記錄調試信息等。
POST:這種過濾器在路由到微服務以后執行。這種過濾器可用來為響應添加標准的 HTTPHeader、收集統計信息和指標、將響應從微服務發送給客戶端等。

(2) 過濾器類型
Spring Cloud Gateway 的 Filter 從作用范圍可分為另外兩種GatewayFilter 與 GlobalFilter。
GatewayFilter:應用到單個路由或者一個分組的路由上。
GlobalFilter:應用到所有的路由上。
局部過濾器
局部過濾器(GatewayFilter),是針對單個路由的過濾器。可以對訪問的URL過濾,進行切面處理。在Spring Cloud Gateway中通過GatewayFilter的形式內置了很多不同類型的局部過濾器。這里簡單將Spring Cloud Gateway內置的所有過濾器工廠整理成了一張表格,雖然不是很詳細,但能作為速覽使用。如下:



每個過濾器工廠都對應一個實現類,並且這些類的名稱必須以 GatewayFilterFactory 結尾,這是Spring Cloud Gateway的一個約定,例如 AddRequestHeader 對應的實現類為AddRequestHeaderGatewayFilterFactory 。對於這些過濾器的使用方式可以參考官方文檔
全局過濾器
全局過濾器(GlobalFilter)作用於所有路由,Spring Cloud Gateway 定義了Global Filter接口,用戶可以自定義實現自己的Global Filter。通過全局過濾器可以實現對權限的統一校驗,安全性驗證等功能,並且全局過濾器也是程序員使用比較多的過濾器。
Spring Cloud Gateway內部也是通過一系列的內置全局過濾器對整個路由轉發進行處理如下:
