微服務網關5-網關中的過濾器


一、過濾器的基本概念

1、作用

過濾器就是在請求的傳遞過程中,對請求和響應做一些修改

2、生命周期

客戶端的請求先經過“pre”類型的filter,然后將請求轉發到具體的業務服務,收到業務服務的響應之后,再經過“post”類型的filter處理,最后返回響應到客戶端。

pre: 這種過濾器在請求被路由之前調用。我們可利用這種過濾器實現參數校驗、權限校驗、流量監控、日志輸出、協議轉換等;

post:這種過濾器在路由到達微服務以后執行。這種過濾器可用做響應內容、響應頭的修改,日志的輸出,流量監控等。

B0JN9A.jpg

3、分類

局部過濾器 GatewayFilter:作用在某一個路由上

全局過濾器 GlobalFilter:作用全部路由上

二、局部過濾器

1、內置局部過濾器

過濾器工廠 作用 參數
AddRequestHeader 為原始請求添加Header Header的名稱及值
AddRequestParameter 為原始請求添加請求參數 參數名稱及值
AddResponseHeader 為原始響應添加Header Header的名稱及值
DedupeResponseHeader 剔除響應頭中重復的值 需要去重的Header名稱及去重策略
Hystrix 為路由引入Hystrix的斷路器保護 HystrixCommand 的名稱
FallbackHeaders 為fallbackUri的請求頭中添加具體的異常信息 Header的名稱
PrefixPath 為原始請求路徑添加前綴 前綴路徑
PreserveHostHeader 為請求添加一個preserveHostHeader=true的屬性,路由過濾器會檢查該屬性以決定是否要發送原始的Host
RequestRateLimiter 用於對請求限流,限流算法為令牌桶 keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
RedirectTo 將原始請求重定向到指定的URL http狀態碼及重定向的url
RemoveHopByHopHeadersFilter 為原始請求刪除IETF組織規定的一系列Header 默認就會啟用,可以通過配置指定僅刪除哪些Header
RemoveRequestHeader 為原始請求刪除某個Header Header名稱
RemoveResponseHeader 為原始響應刪除某個Header Header名稱
RewritePath 重寫原始的請求路徑 原始路徑正則表達式以及重寫后路徑的正則表達式
RewriteResponseHeader 重寫原始響應中的某個Header Header名稱,值的正則表達式,重寫后的值
SaveSession 在轉發請求之前,強制執行WebSession::save 操作
secureHeaders 為原始響應添加一系列起安全作用的響應頭 無,支持修改這些安全響應頭的值
SetPath 修改原始的請求路徑 修改后的路徑
SetResponseHeader 修改原始響應中某個Header的值 Header名稱,修改后的值
SetStatus 修改原始響應的狀態碼 HTTP 狀態碼,可以是數字,也可以是字符串
StripPrefix 用於截斷原始請求的路徑 使用數字表示要截斷的路徑的數量
Retry 針對不同的響應進行重試 retries、statuses、methods、series
RequestSize 設置允許接收最大請求包的大 小。如果請求包大小超過設置的值,則返回 413 Payload TooLarge 請求包大小,單位為字節,默認值為5M
ModifyRequestBody 在轉發請求之前修改原始請求體內容 修改后的請求體內容
ModifyResponseBody 修改原始響應體的內容 修改后的響應體內容

2、內置局部過濾器的使用

      routes:
      - id: service-edu
        uri: lb://service-edu
        predicates:
        - Path=/user/**, /*/edu/**
        filters:
        - SetStatus=250 # 修改返回狀態碼

測試:

B0Nln0.png

三、全局過濾器

1、內置全局過濾器

B0N37T.png

內置全局過濾器的使用舉例:負載均衡過濾器

lb://service-edu

2、自定義全局過濾器

定義一個Filter實現 GlobalFilter 和 Ordered接口


免責聲明!

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



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