Provider Filter

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#filters

Spring-Web 提供了一些有用的 Filter。

基本 Filter

過濾器 Filter

表單資料 - Form data (內建)

Servlet API 本來僅支持 HTTP GET、POST 的支持。

spring-web 提供了FormContentFilter ,可以攔截 HTTP PUT 、PATCH、DELETE 的請求。

application/x-www-form-urlencoded 從請求中取得表單資料,並重新包裝通過 ServletRequest 讓其可以取得。

轉送標頭 - Forwarded Header (可選)

當請求經過負載平衡、或其他代理時,可能造成 host、port、schema 改變。

ForwardedHeaderFilter 是一個 servlet Filter,用於修改請求,以避免進一步的影響。

其依賴於 RequestContextFilter ,若要使用必須先設定此 Filter。

轉送標頭出於安全考量,無法得知是 代理加的 或是 惡意的客戶端加的,可以透過配置removeOnly=true,來刪除不需使用的標頭。

Springboot 使用時透過 FilterRegistrationBean 註冊,並且為了異步請求與錯誤分派,必須確認有使用 DispatcherType.ASYNC and DispatcherType.ERROR 並且除了DispatcherType.REQUEST 以外。

淺ETag - Shallow ETag (可選)

可以通過 ShallowEtagHeaderFilter 要寫入回應的內容,以達到 HTTP 緩存的優化。

此策略可節省網絡帶寬(network bandwidth),但不會節省CPU,因為必須為每個請求計算完整且合適的回應。

Springboot 使用時透過 FilterRegistrationBean 註冊,並且為了異步請求,必須確認有使用 DispatcherType.ASYNC。

CORS (內建)

Spring MVC 預設以對 CORS(跨域資源共享) 提供細粒度的支持。

細節參考: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-cors

也可以透過 CorsFilter。若與 Spring-security 一起使用,其中已包含對 CorsFilter 支持。

細節參考: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-cors-filter

Last updated

Was this helpful?