自定義攔截器
1. 自定義的攔截器實現(xiàn)HandlerInterceptor接口
public class FirstInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("firstInterceptor->afterCompletion");
}
/* 渲染視圖后調用*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("firstInterceptor->postHandle");
}
/* 目標方法執(zhí)行后調用
* 但是此時還沒有渲染視圖*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("firstInterceptor->preHandle");
return true;
}
/* 目標方法執(zhí)行前調用 :
* 如果返回false,那么將不再繼續(xù)*/
}
2. 在springmvc中配置攔截器
<mvc:interceptors>
<bean class="interceptor.FirstInterceptor"></bean>
<!-- 配置(不)攔截的路徑 -->
<mvc:interceptor>
<mvc:mapping path="/testInterceptor"/><!-- secondInterceptor攔截的路徑 -->
<mvc:exclude-mapping path="/other"/><!-- secondInterceptor不攔截的路徑 -->
<bean class="interceptor.SecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
3. 攔截器的執(zhí)行順序
firstInterceptor->preHandle
secondInterceptor->preHandle
testInterceptor
secondInterceptor->postHandle
firstInterceptor->postHandle
secondInterceptor->afterCompletion
firstInterceptor->afterCompletion

Paste_Image.png
如果某個preHandle方法返回了false,那么其后面的方法都沒有機會再執(zhí)行,除了比該攔截器優(yōu)先級高的afterCompletion方法除外

Paste_Image.png