自定義攔截器
package com.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 自定義攔截器,需要實現 HandlerInterceptor 接口
* @author pengfei.xiong
*
*/
public class MyInterceptor implements HandlerInterceptor{
/**
* 該方法在處理器方法執行之前執行。其返回值爲 boolean,若爲 true,則緊接着會執行處理器方
法,且會將 afterCompletion()方法放入到一個專門的方法棧中等待執行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("正在執行----------preHandle");
return true;
}
/**
* 該方法在處理器方法執行之後執行。處理器方法若最終未被執行,則該方法不會執行。
由 於該方法是在處理器方法執行完後執行,且該方法參數中包含 ModelAndView,所以該方法可以修
改處理器方法的處理結果數據,且可以修改跳轉方向
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("正在執行----------postHandle");
}
/**
* 當 preHandle()方法返回 true 時,會將該方法放到專門的方法棧中,等到對請求進行響應的所有
工作完成之後才執行該方法。即該方法是在中央調度器渲染(數據填充)了響應頁面之後執行的,此
時對 ModelAndView 再操作也對響應無濟於事
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("正在執行----------afterCompletion");
}
}
在springmvc.xml中註冊攔截器
<!-- 註冊攔截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 攔截所有 -->
<mvc:mapping path="/**"/>
<bean class="com.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>