一、過濾器的基本概念
1、作用
過濾器就是在請求的傳遞過程中,對請求和響應做一些修改
2、生命周期
客戶端的請求先經過“pre”類型的filter,然后將請求轉發到具體的業務服務,收到業務服務的響應之后,再經過“post”類型的filter處理,最后返回響應到客戶端。
pre: 這種過濾器在請求被路由之前調用。我們可利用這種過濾器實現參數校驗、權限校驗、流量監控、日志輸出、協議轉換等;
post:這種過濾器在路由到達微服務以后執行。這種過濾器可用做響應內容、響應頭的修改,日志的輸出,流量監控等。
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 # 修改返回狀態碼
測試:
三、全局過濾器
1、內置全局過濾器
內置全局過濾器的使用舉例:負載均衡過濾器
lb://service-edu
2、自定義全局過濾器
定義一個Filter實現 GlobalFilter 和 Ordered接口