1 SpringMVC攔截器

1.1 攔截器(interceptor)的作用

Spring MVC 的攔截器類似於 Servlet 開發中的過濾器 Filter,用於對處理器進行預處理後處理

將攔截器按一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(Interceptor Chain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。攔截器也是AOP具體思想的體現。

1.2 攔截器和過濾器區別

區別

過濾器

攔截器

適用範圍

時servlet規範中的一部分,任何Java Web工程都可以使用

是SpringMVC 框架自己的,只有使用了SpringMVC框架的工程才能使用

攔截範圍

在 url-pattern 中配置了/*之後,可以對所有要訪問的資源攔截

只會攔截訪問的控制器方法,如果訪問的是jsp、html、css、image或js是不會進行攔截的

1.3 攔截器快速入門

步驟:

  1. 創建攔截器類實現HandlerInterceptor接口
  2. 配置攔截器(spring-mvc.xml)
  3. 測試攔截器的攔截效果

1.4 攔截器的執行順序

先配置的preHandle先執行,先配置的postHandle、afterCompletion後執行

1.5 攔截器方法説明

方法名

説明

preHandle()

方法將在請求處理之前進行調用,該方法的返回值是布爾值Boolean類型的,當它返回為false時,表示請求結束,後續的Interceptor和Controller都不會再執行;當返回值為true時就會繼續調用下一個Interceptor的preHandle方法

postHandle()

該方法是在當前請求進行處理之後被調用,前提是preHandle方法的返回值為true時才能被調用哦個,且它會在DispatcherServlet進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller處理之後的ModelAndView對象進行操作

afterCompletion()

該方法將在整個請求結束之後,也就是在DispatcherServlet渲染了對應的視圖之後執行,前提是preHandle方法的返回值為true時才能被調用