1.定义
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
定义拦截器实现HandlerInterceptor接口
public class MyHandlerInterceptor implements HandlerInterceptor {
//controller执行前调用此方法
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("执行了MyHandlerInterceptor1的前置方法......");
return true; //false:拦截 true:放行
}
//controller执行前调用此方法
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("执行了MyHandlerInterceptor1的执行方法......");
}
//controller执行后且视图返回后调用此方法
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("执行了MyHandlerInterceptor1的后置方法......");
}
}
2.拦截器配置
在springmvc.xml
<!-- 拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.djc.ssm.interceptor.MyHandlerInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3.拦截器执行顺序
如果有多个拦截器
<!-- 拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.djc.ssm.interceptor.MyHandlerInterceptor1"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.djc.ssm.interceptor.MyHandlerInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
测试结果:
执行了MyHandlerInterceptor1的前置方法......
执行了MyHandlerInterceptor2的前置方法......
执行了MyHandlerInterceptor2的执行方法......
执行了MyHandlerInterceptor1的执行方法......
执行了MyHandlerInterceptor2的后置方法......
执行了MyHandlerInterceptor1的后置方法......
可用做登录验证,了解即可