天天看點

SpringBoot三大利器,過濾器、攔截器、切面

今天智慧的碼農給大家介紹下SprigBoot 三大利器,過濾器、攔截器、切面。各位Java後端小夥伴,想必在工作和面試中也經常用到和被問到這三大利器。今天就給大家做個簡單的介紹。

如果大家喜歡的話,請點贊、轉發和關注,您的支援是我文字分享的最大動力。

SpringBoot三大利器,過濾器、攔截器、切面

一、概念

過濾器(Filter)是Java Web的元件之一,其他元件還有Servlet和Listener等,基于回調機制,可以對請求進行預處理和請求後處理,既可以對請求進行攔截,也可以對響應進行處理。

攔截器(Interceptor)基于反射機制,可以在請求進到controller前進行攔截,隻對controller有效。

切面(Aspect)是通知和切點的結合。通知和切點共同定義了切面的全部内容,可以在切點進行前置通知、後置通知、環繞處理、異常執行。

二、觸發時機

SpringBoot三大利器,過濾器、攔截器、切面

通過圖檔可以看到Filter過濾器在容器和Servlet之間觸發,Intecepter攔截器在Servlet和Controller之間觸發,切面作用于方法,切面在方法執行前、後、環繞、異常執行。

三、作用範圍

  • 過濾器幾乎對所有請求有效,包括css js等資源檔案
  • 攔截器隻對action(controller)有效
  • 切面對所有的方法起作用

四、執行和異常順序

SpringBoot三大利器,過濾器、攔截器、切面
  • 執行順序:過濾器、攔截器、切面
  • 異常順序:切面、攔截器、過濾器

五、實作方式

本篇文章隻做簡單的介紹,後續會有對應的具體文章。

  • 過濾器,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 三大利器,過濾器、攔截器、切面的簡單介紹。歡迎大家一起學習和交流,并在評論區留言。關注智慧的碼農,更多産品、技術、商業的文章分享給您!

SpringBoot三大利器,過濾器、攔截器、切面