攔截器的用途是很是廣的,它主要的做用是攔截用戶請求,處理數據,斷定請求是否合理,決定是否放行。一般把攔截器用來驗證權限、判斷用登錄狀態等。spring
springMVC中對攔截器有良好的支持。通常可經過兩種方式,其一實現Spring 的HandlerInterceptor 接口或繼承該接口的實現類;其二實現Spring的WebRequestInterceptor接口貨繼承該接口的實現類。mvc
今天小博老師先給你們介紹SpringMVC中第一種攔截器的實現方式。咱們先來看一下HandlerInterceptor接口的源碼結構:app
HandlerInterceptor 接口中定義了三個方法:post
1. preHandle 方法。該方法會在請求處理以前進行調用。返回值是布爾值Boolean 類型的,當返回false時請求結束,後續攔截器 和Controller 都不會被執行;當返回true 時繼續調用下個攔截器 的preHandle 方法,若是已是最後一個攔截器,則調用當前請求的Controller 方法。spa
2. postHandle 方法。該方法在請求處理以後,即Controller 方法調用以後執行。可是將會DispatcherServlet 進行視圖渲染以前被調用,所以能夠對Controller 處理以後的ModelAndView 對象進行操做,以便於在視圖渲染時使用。3d
3. afterCompletion方法。該方法在整個請求結束以後,即DispatcherServlet 渲染對應的視圖以後才被執行。這個方法的主要做用是進行對象清理、資源釋放。code
攔截器在spring中的配置方式以下:對象
<mvc:interceptors> blog
<!-- 使用bean定義一個Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截全部的請求 --> 繼承
<bean class="com.bwf.interceptor.BwfInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/bwf/company"/>
<!-- 定義在mvc:interceptor下面的表示是對特定的請求才進行攔截的 -->
<bean class="com.bwf.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>