今天智慧的碼農給大家介紹下SprigBoot 三大利器,過濾器、攔截器、切面。各位Java後端小夥伴,想必在工作和面試中也經常用到和被問到這三大利器。今天就給大家做個簡單的介紹。
如果大家喜歡的話,請點贊、轉發和關注,您的支援是我文字分享的最大動力。
一、概念
過濾器(Filter)是Java Web的元件之一,其他元件還有Servlet和Listener等,基于回調機制,可以對請求進行預處理和請求後處理,既可以對請求進行攔截,也可以對響應進行處理。
攔截器(Interceptor)基于反射機制,可以在請求進到controller前進行攔截,隻對controller有效。
切面(Aspect)是通知和切點的結合。通知和切點共同定義了切面的全部内容,可以在切點進行前置通知、後置通知、環繞處理、異常執行。
二、觸發時機
通過圖檔可以看到Filter過濾器在容器和Servlet之間觸發,Intecepter攔截器在Servlet和Controller之間觸發,切面作用于方法,切面在方法執行前、後、環繞、異常執行。
三、作用範圍
- 過濾器幾乎對所有請求有效,包括css js等資源檔案
- 攔截器隻對action(controller)有效
- 切面對所有的方法起作用
四、執行和異常順序
- 執行順序:過濾器、攔截器、切面
- 異常順序:切面、攔截器、過濾器
五、實作方式
本篇文章隻做簡單的介紹,後續會有對應的具體文章。
- 過濾器,Filter接口
- 攔截器,WebMvcConfigurerAdapter,HandlerInterceptor
- 切面,@Pointcut,@Around,@Before,@After,@AfterReturning,@AfterThrowing
六、擷取參數
過濾器和攔截器都可以讀取HttpRequest的流,切面可通過切點直接擷取。
- 過濾器(Filter) :可以拿到原始的http請求,但是拿不到你請求的控制器和請求控制器中的方法的資訊。
- 攔截器(Interceptor):可以拿到你請求的控制器和方法,卻拿不到請求方法的參數。
- 切面(Aspect): 可以拿到方法的參數,但是卻拿不到http請求和響應的對象。
七、使用場景
1、過濾器
JavaDoc中的使用場景如下:
(1)使用者通路權限過濾
(2) 日志過濾,可以記錄特殊使用者的特殊請求的記錄等
(3) 圖像轉換
(4) 資料壓縮
(5) 加密
(6) Token校驗
(7) 媒體類型過濾
2、攔截器
(1)登入驗證,判斷使用者是否登入。
(2)權限驗證,判斷使用者是否有權限通路資源,如校驗token
(3)日志記錄,記錄請求記錄檔(使用者ip,通路時間等),以便統計請求通路量。
(4)處理cookie、本地化、國際化、主題等。
(5)性能監控,監控請求處理時長等。
(6)通用行為:讀取cookie得到使用者資訊并将使用者對象放入請求,進而友善後續流程使用,還有如提取Locale、Theme資訊等,隻要是多個處理器都需要的即可使用攔截器實作)
3、切面
(1)日志列印
(2)性能監控
(3)針對某些方法實作定制業務
以上就是SprigBoot 三大利器,過濾器、攔截器、切面的簡單介紹。歡迎大家一起學習和交流,并在評論區留言。關注智慧的碼農,更多産品、技術、商業的文章分享給您!