spring mvc 拦截器
拦截器
SpringMVC提供了拦截器机制,允许运行目标方法之前进行一些拦截工作或者目标方法运行之后进行一下其他相关的处理。自定义的拦截器必须实现HandlerInterceptor接口。
自定义拦截器
注意事项,preHandle方法,一定要返回true,否则不能往下执行。
package com.hww.interceptor;
import org.aopalliance.intercept.Interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(this.getClass().getName()+"------------------preHandle");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(this.getClass().getName()+"------------------postHandle");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(this.getClass().getName()+"------------------afterCompletion");
}
}
配置拦截器interceptor
<mvc:interceptors>
<bean id="interceptor" class="com.hww.interceptor.MyInterceptor"></bean>
</mvc:interceptors>
配置多个拦截器
<mvc:interceptors>
<bean id="interceptor" class="com.hww.interceptor.MyInterceptor"></bean>
<bean id="interceptor2" class="com.hww.interceptor.MyInterceptor2"></bean>
</mvc:interceptors>
拦截器的执行
perHandler 顺序执行,然后执行业务程序,然后执行逆序执行postHandler,最后afterCompletion逆序执行
拦截器和过滤器的区别
1、过滤器是基于函数回调的,而拦截器是基于java反射的。
2、过滤器依赖于servlet容器,而拦截器不依赖与Servlet容器。
3、过滤器几乎对所有的请求都起作用,而拦截器只能对action请求起作用
4、拦截器可以访问action的上下文,而过滤器不可以
5、在action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化的时候调用一次