1. 程式人生 > >SpringMVC系列(十二)自定義攔截器

SpringMVC系列(十二)自定義攔截器

Spring MVC也可以使用攔截器對請求進行攔截處理,使用者可以自定義攔截器來實現特定的功能,自定義的攔截器必須實現HandlerInterceptor介面
– preHandle():這個方法在業務處理器處理請求之前被呼叫,在該方法中對使用者請求 request 進行處理。如果程式設計師決定該攔截器對請求進行攔截處理後還要呼叫其他的攔截器,或者是業務處理器去進行處理,則返回true;如果程式設計師決定不需要再呼叫其他的元件去處理請求,則返回false。
– postHandle():這個方法在業務處理器處理完請求後,但是DispatcherServlet 向客戶端返回響應前被呼叫,在該方法中對使用者請求request進行處理。
– afterCompletion():這個方法在 DispatcherServlet 完全處理完請求後被呼叫,可以在該方法中進行一些資源清理的操作。

1.實現HandlerInterceptor

 1 package com.study.springmvc.interceptors;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.HandlerInterceptor;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 public class FirstInterceptor implements HandlerInterceptor{
10 
11     /**
12      * 該方法在目標方法之前被呼叫.
13      * 若返回值為 true, 則繼續呼叫後續的攔截器和目標方法. 
14      * 若返回值為 false, 則不會再呼叫後續的攔截器和目標方法. 
15      * 
16      * 可以考慮做許可權. 日誌, 事務等. 
17      */
18     @Override
19     public boolean preHandle(HttpServletRequest request,
20             HttpServletResponse response, Object handler) throws Exception {
21         System.out.println("[FirstInterceptor] preHandle");
22         return true;
23     }
24 
25     /**
26      * 呼叫目標方法之後, 但渲染檢視之前. 
27      * 可以對請求域中的屬性或檢視做出修改. 
28      */
29     @Override
30     public void postHandle(HttpServletRequest request,
31             HttpServletResponse response, Object handler,
32             ModelAndView modelAndView) throws Exception {
33         System.out.println("[FirstInterceptor] postHandle");
34     }
35 
36     /**
37      * 渲染檢視之後被呼叫. 釋放資源
38      */
39     @Override
40     public void afterCompletion(HttpServletRequest request,
41             HttpServletResponse response, Object handler, Exception ex)
42             throws Exception {
43         System.out.println("[FirstInterceptor] afterCompletion");
44     }
45 
46 }

2.在springmvc.xml配置定義的攔截器

1 <mvc:interceptors>
2         <!-- 配置自定義的攔截器 -->
3         <bean class="com.study.springmvc.interceptors.FirstInterceptor"></bean>
4         
5     </mvc:interceptors>