SpringMVC项目中,如果定义多个拦截器。形成拦截器链。执行顺序与注册顺序一致
<!--声明拦截器对象-->
<mvc:interceptors>
<!--第一个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bjpowernode.handle.Myinterceptor"></bean>
</mvc:interceptor>
<!--第二个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bjpowernode.handle.Myinterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--其中mvc:mapping 表示匹配的请求路径即所需要拦截的路径。
bean 标签指定的class路径表示创建一个拦截器对象。-->
第一个拦截器
package com.bjpowernode.handle;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 2019/09/03
*/
public class Myinterceptor implements HandlerInterceptor {
/**
*preHandel 表示拦截器执行的方法 handle 表示
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行拦截器的prehandle ---11111111111方法 ");
//如果返回值是false则整个请求结束
return true;
}
//modelAndView 表示控制器的返回结果
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
System.out.println("执行拦截器的 postHandle ---11111111111方法 ");
//postHandle 可以修改 modelAndview 结果
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("执行拦截器的afterCompletion ---11111111111方法 ");
}
}
第二个拦截器
package com.bjpowernode.handle;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 2019/09/03
*/
public class Myinterceptor2 implements HandlerInterceptor {
/**
*preHandel 表示拦截器执行的方法 handle 表示
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行拦截器的prehandle ------2222222方法 ");
return true;
}
//modelAndView 表示控制器的返回结果
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
System.out.println("执行拦截器的 postHandle ------2222222方法 ");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("执行拦截器的afterCompletion ------2222222方法 ");
}
}
其中当我们定义的拦截器中有一个拦截器的preHandle方法的返回值是false时,此时拦截器链会立即停止执行。当preHandle的返回值为false的时候整个请求就结束了。