springMVC拦截器
定义两个拦截器,实现HandlerInterceptor接口,并重写里面的三个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package com.syl.test;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;
public class HandlerInterceptor1 implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return HandlerInterceptor.super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); }
}
|
在springmvc.xml文件中配置
1 2 3 4 5 6 7 8 9 10 11 12
| <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.syl.test.HandlerInterceptor1"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.syl.test.HandlerInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors>
|
经测试:
拦截器1放行,拦截器2放行
preHandle方法按顺序执行,
postHandle和afterCompletion按拦载器配置的逆向顺序执行。
拦截器1放行,拦截器2拦截
拦截器1放行,栏截器2 preHandle才会执行。
拦截器2 preHandle不放行,拦截器2postHandle和afterCompletion不会执行。
只要有一个拦截器不放行,所有的2postHandle都不会执行
拦截器1的afterCompletion会执行
拦截器1拦截,拦截器2拦截
拦载器1 preHandle不放行,postHandle和afterCompletion不会执行。中
拦载器1 preHandle不放行,拦截器2不执行。