Spring中Filter和Interceptor的區別

mvc

Interceptor

主要做用:攔截用戶請求,進行處理,好比判斷用戶登陸狀況、權限驗證,只要針對Controller請求進行處理,是經過HandlerInterceptorspring

Interceptor分兩種狀況,一種是對會話的攔截,實現spring的HandlerInterceptor接口並註冊到mvc的攔截隊列中,其中preHandle()方法在調用Handler以前進行攔截(上圖步驟3),postHandle()方法在視圖渲染以前調用(上圖步驟5),**afterCompletion()**方法在返回相應以前執行;另外一種是對方法的攔截,須要使用@Aspect註解,在每次調用指定方法的前、後進行攔截。mvc

Filter

主要做用:過濾字符編碼、作一些業務邏輯判斷,主要用於對用戶請求進行預處理,同時也可進行邏輯判斷。框架

Filter在請求進入servlet容器執行service()方法以前就會通過filter過濾(上圖步驟1),不像Intreceptor同樣依賴於springmvc框架,只須要依賴於servlet。Filter啓動是隨WEB應用的啓動而啓動,只須要初始化一次,之後均可以進行攔截。函數

Filter有以下幾個種類:post

  • 用戶受權Filter:檢查用戶請求,根據請求過濾用戶非法請求;
  • 日誌Filter:記錄某些特殊的用戶請求;
  • 解碼Filter:對非標準編碼的請求解碼。

Filter和Interceptor的區別

  1. Filter是基於函數回調(doFilter()方法)的,而Interceptor則是基於Java反射的(AOP思想)。
  2. Filter依賴於Servlet容器,而Interceptor不依賴於Servlet容器。
  3. Filter對幾乎全部的請求起做用,而Interceptor只能對action請求起做用。
  4. Interceptor能夠訪問Action的上下文,值棧裏的對象,而Filter不能。
  5. 在action的生命週期裏,Interceptor能夠被屢次調用,而Filter只能在容器初始化時調用一次。
  6. Filter在過濾是隻能對request和response進行操做,而interceptor能夠對request、response、handler、modelAndView、exception進行操做。
相關文章
相關標籤/搜索