過濾器和攔截器的區別


1. 觸發時機不同

  過濾器:過濾器是在請求進入容器后,但請求進入servlet之前進行預處理的,請求結束返回也是,是在servlet處理完后,返回給前端之前。

  攔截器:攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,因為攔截器是spring提供並管理的,spring的功能可以被攔截器使用,在攔截器里注入一個service,可以調用業務邏輯。而過濾器是JavaEE標准,只需依賴servlet api ,不需要依賴spring

2. 實現方式不同

  過濾器:基於回調函數,由Servlet容器回調完成。Filter是依賴於Servlet容器,屬於Servlet規范的一部分,生命周期由Servlet容器管理。

  攔截器:基於反射,常通過動態代理(反射)的方式來執行。攔截器則可以通過IoC容器來管理,因此可以通過注入等方式來獲取其他Bean的實例,因此使用會更方便。

3. 獲取資源的區別

  過濾器(Filter) :可以拿到原始的http請求,但是拿不到你請求的控制器和請求控制器中的方法的信息。

  攔截器(Interceptor):可以拿到你請求的控制器和方法,卻拿不到請求方法的參數。

  切片(Aspect): 可以拿到方法的參數,但是卻拿不到http請求和響應的對象

文章參考網址:https://zhuanlan.zhihu.com/p/340397290


免責聲明!

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



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