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