Spring 中攔截器、過濾器和切面的區別


在Spring中,當一個請求到來,我們可以對其進行預處理,以及對返回的結果進行再加工。Spring提供了三個不同的工具來實現這個功能,分別對應不同的場景,剛好有個項目里都用到了,總結一下。

三種功能簡介

過濾器

實現方法

需要實現 javax.servlet.Filter 接口,或者繼承 org.springframework.web.filter.OncePerRequestFilter 類,並注冊該過濾器(@WebFilter),並在該注解中指定需要攔截哪些請求。

可捕獲的參數

  • request : 請求的參數,可以通過HttpServletRequestWrapper來修改傳入的URI、頭信息等;
  • response : 返回體
  • filterChain : 過濾鏈(待補充)

攔截器

實現方法

需要實現 org.springframework.web.servlet.HandlerInterceptor 接口,並在 WebMvcConfigurer 中調用addInterceptors 添加攔截器和對應的攔截路徑。

可捕獲的參數

  • request : 請求的參數,可以通過HttpServletRequestWrapper來修改傳入的URI、頭信息等;
  • response : 返回體
  • handler :

切面

實現方法

使用@Aspect標記為切面類,使用@Pointcut和@Around、@Before、@After、@AfterReturning、@AfterThrowing來確定攔截位置。

可捕獲的參數

對應方法的參數

三種的區別

  • 執行順序:過濾器->攔截器->切面
  • 過濾器、攔截器屬於請求層面的攔截;切面屬於方法層面的攔截


免責聲明!

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



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