應用場景
過濾器的應用:字符編碼轉換,敏感詞過濾、登陸權限驗證、資源訪問權限等
攔截器的應用:AOP、需要有一些業務邏輯(需要注入Bean等)
區別
- 過濾器配置再web.xml中、攔截器配置springmvc的配置文件中(即在DispatcherServlet的contextConfigLocation屬性指定文件所在位置,默認加載的是:/WEB-INF/servlet名稱-servlet.xml(springmvc-servlet.xml))
- 過濾器基於函數回調、攔截器基於反射
- 過濾器幾乎對所有請求起作用,攔截器只對目標執行方法(action方法)起作用
- 過濾器:對請求進行預處理、再交給Servlet處理並且生成響應,最后Filter再對服務器響應進行后處理
攔截器:可以再方法執行前調用(preHandle)、方法執行后(postHandle)、視圖頁面渲染后(afterCompletion)
執行流程
過濾器初始化-》(客戶端請求過來)dofilter處理請求-》到達dispatchServlet,在目標方法執行前preHandle-》(放行,返回true)執行目標方法-》(正常返回,異常則不執行)postHandle-》(無論目標方法是否執行或者執行是否出現異常,都會執行)afterCompletion-》dofilter處理響應-》客戶端加載頁面