『壹』 Spring Boot-Filter過濾器使用
1、基礎准備
2、編寫Filter
此處我們重點關注 doFilter方法 ,編寫實現類重寫該方法。
Ⅰ 在自定義Filter實現類上使用@WebFilter註解;
Ⅱ 自定義filterName(隨意,不要與其他Filter重復即可);
Ⅲ 定義urlPatterns此處設置為"/*",表示攔截所有請求;
Ⅰ 將傳入的 request 與 response 對象轉換為 Http類型 ;
Ⅱ 自定義不需要處理的URI數組
Ⅲ 獲取請求URI
Ⅳ 判斷本次請求
封裝checkURI方法,如下:
a、注入PATH_MATCHER,用於路徑比較,如下:
b、方法體,如下:
Ⅴ 不需要攔截,則直接放行
Ⅵ 其餘路徑,判斷登錄狀態
a、已登錄,則放行
BaseContext是自定義存儲線程userId的類
b、未登錄,攔截
自定義常量
攔截,此處使用response向前端返回響應數據R.error(NOT_LOGIN)
3、掃描Filter
在啟動類上添加 @ServletComponentScan註解 ,用於掃描 @WebFilter 註解 ,如下:
4、測試
編寫Controller類,啟動測試。
以上即為Filter基礎使用的內容,感謝閱讀。
『貳』 Filter簡述和@Filter註解使用
Filter主要用於對用戶請求進行預處理,也可以對請求的響應結果進行後續處理。它與Servlet的區別在於,不能直接向用戶生成響應結果。
用戶發送請求,Filter首先攔截用戶請求進行預處理,接著將請求交給Servlet進行處理並生成響應,最後Filter再對伺服器響應結果進行後續處理。
(1)根據需要可以檢查並修改HttpServletRequest請求頭和請求數據。
(2)根據需要可以檢查並修改HttpServletResponse響應頭和響應數據。
(1)許可權過濾:Filter負責對請求進行許可權檢查,過濾非法請求。
(2)日誌記錄:對某些特殊操作進行日誌記錄。
(3)設置字元集。
servlet3.0前,Filter的注入通常採用xml方式注入,但是在servlet3.0後,開始支持通過註解的方式進行注入。
(1)基於註解@Filter注入
採用@Filter注入時,需要通過註解 @ServletComponentScan 配置掃描路徑,如果是SpringBoot項目,通常添加到啟動類上。
(2)通過配置類進行注入
過濾器Filter的功能看起來和攔截器Interceptor類似,那麼他們是否可以互相替換呢?具體有哪些差別呢?後面會繼續分析
『叄』 過濾器的註解配置問題
1、通過創建FilterRegistrationBean的方式(建議使用此種方式,統一管理,且通過註解的方式若不是本地調試,如果在filter中需要增加cookie可能會存在寫不進前端情況)
2、通過註解@WebFilter的方式
通過創建FilterRegistrationBean的方式創建多個filter以及設置執行順序: