springboot過濾器/攔截器/AOP區別與執行順序


 如果監聽器、過濾器、 攔截器、 AOP都存在,則它們的執行順序為:監聽器 => 過濾器=> 攔截器=> AOP。

過濾器/攔截器/AOP

簡介

  • 過濾器:Filter。攔截器:Interceptor 。
  • 在Spring構架的程序中,要優先使用攔截器。幾乎所有 Filter 能夠做的事情,interceptor 都能夠輕松的實現。
  • AOP:可以自定義切入的點,有方法的參數,但拿不到http請求,可以通過RequestContextHolder等方式獲得。

調用順序

過濾前=> 攔截前=> AOP=> Controller=> AOP=> 攔截后=> 過濾后

 

 

 

 

不同點

過濾器 攔截器
使用場景 對請求/響應進行修改、判斷等。一般用於過濾參數、登錄權限驗證、資源訪問權限控制、敏感詞匯過濾、字符編碼轉換。 在service或者一個方法前/后調用一個方法,或者在方法后調用一個方法。
能力

可以拿到原始的http請求與響應,拿不到請求的控制器和請求控制器中的方法的信息。

可以修改請求、響應、參數:比如:修改字符編碼、刪除低俗文字、刪除危險字符、修改參數

可以拿到你請求的控制器和方法,卻拿不到請求與響應。
順序 可指定順序。 可指定順序。
實現方式 回調函數 AOP
使用范圍 只能用於Web 可用於Web、Application、Swing
作用范圍 所有請求。 只能是controller請求。靜態資源無法控制。
使用位置 controller前后、dispaterServlet前后 controller前后
規范定義

Servlet 規范定義,Servlet 容器支持。

Filter 接口定義在 javax.servlet 包

Spring容器內,Spring框架支持。

HandlerInterceptor 接口 定義在org.springframework.web.servlet 包

靈活性/粒度

靈活性差(粒度大)。

不能夠使用 Spring 容器資源

靈活性好(粒度小)。

能使用Spring里的任何資源、對象,例如 Service對象、數據源、事務管理等,通過IoC注入到攔截器即可。

打斷鏈路 打斷方法:處理請求和響應對象來引發中斷,需要額外的動作,比如將用戶重定向到錯誤頁面。 打斷方法:preHandle方法內返回 false
執行次數 一個controller周期只調用一次:一個過濾器實例只能在容器初始化時調用一次。 一個controller周期可調用多次

 

 

 

參考文章:

https://blog.csdn.net/feiying0canglang/article/details/121387483


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM