一、自定义一个拦截器类
public class FirstInterceptor implements HandlerInterceptor{
/**
* 渲染视图之后被调用. 释放资源
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion");
}
/**
* 调用目标方法之后, 但渲染视图之前.
* 可以对请求域中的属性或视图做出修改.
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("postHandle");
}
/**
* 该方法在目标方法之前被调用.
* 若返回值为 true, 则继续调用后续的拦截器和目标方法.
* 若返回值为 false, 则不会再调用后续的拦截器和目标方法.
* 可以考虑做权限. 日志, 事务等.
*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("preHandle");
return true;
}
}
二、配置文件
<mvc:interceptors>
<!-- 配置自定义的拦截器 -->
<bean class="cn.springmvc.interceptors.FirstInterceptor"></bean>
<!-- 配置拦截器(不)作用的路径 -->
<mvc:interceptor>
<!-- 配置拦截器作用的路径 -->
<mvc:mapping path="/emps"/>
<!-- 配置拦截器不作用的路径 -->
<mvc:exclude-mapping path="/user_logout" />
<bean class="cn.springmvc.interceptors.SecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
多个拦截方法的执行顺序
myinterceptor1:preHandle()
myinterceptor2:preHandle()
myinterceptor2:postHandle()
myinterceptor1:postHandle()
myinterceptor2:afterCompletion()
myinterceptor1 :afterCompletion()