一個請求進來的時候,先交給web伺服器提供的過濾器,例如springboot專案,提供的伺服器也就是內建的tomcat,過濾器處理完成以後,然後會來到servlet,有一個dispatcherServlet會呼叫攔截器,再由dispatcherServlet分發給對應的Controller,處理完請求後,會原路返回,再回到攔截器,再回到過濾器,最終響應給客戶端
請求->Tomcat->Filter->Servlet->Interceptor->Controller->Deal-Controller->Interceptor->Servlet->Filter->Tomcat->給客戶端返回
過濾器Filter
- 過濾器會先執行,他是servlet的一部分,更接近於底層,會在servlet請求之前和響應之後進行處理進行執行
- 實現方式:依賴servlet提供的Filter介面,多個過濾器可以根據配置,來確定他們執行的順序
- 用法區別:過濾器通常會用於實現必要的基礎設施工作,如編碼處理,檢視響應,請求引數處理,URL重定向等
攔截器Interceptor
- 攔截器會後執行,他是springmvc的一部分,更接近於業務層,會在Controller請求之前和處理之後進行執行
- 實現方式:依賴SpringMVC提供的handlerInterceptor介面,多個攔截器的執行順序由Bean 的配置順序來決定,可以透過@Order註解來改變執行順序
- 用法區別:攔截器通常用於執行一些和業務相關,不是必須的一些工作,比如身份認證與授權,介面的效能檢測,跨域處理,日誌記錄等