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