赞
踩
| 一、什么是拦截器?
Spring MVC中的拦截器(Interceptor),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
1、拦截器的定义
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义:
1、通过实现HandlerInterceptor接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。
2、通过实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。
以实现HandlerInterceptor接口方式为例,自定义拦截器类的代码如下:
public class MyInterceptor implements HandlerInterceptor{ //在执行方法之前执行拦截器 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub System.out.println("我是一个拦截器哟!"); response.sendRedirect("test.jsp"); return false; } //在用户提交数据之后,再拦截一次 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } //整个请求完成,即视图渲染结束之后执行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
2、拦截器的配置
要使自定义的拦截器类生效,还需要在Spring MVC的配置文件中进行配置。
<!--拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!--拦截所有 -->
<mvc:mapping path="/**"/>
<!--不拦截 -->
<mvc:exclude-mapping path="/first"/>
<!--拦截的类 -->
<bean class="com.createblue.service.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
二、单个拦截器和多个拦截器执行的顺序
1、单个拦截器,在程序中的执行流程如下图所示:
2、多个拦截器(假设有两个拦截器Interceptor1和Interceptor2,并且在配置文件中, Interceptor1拦截器配置在前),在程序中的执行流程如下图所示:
个人总结:
当遇到多个拦截器时,假如有1和2两个拦截器时,相当于一个大的if结构,最后才执行外层,先进入1的拦截器,执行preHandle为true时,紧接着执行2的preHandle,再执行2的postHandle,再又返回到执行1的postHandle,然后又回到2的afterHandle,最后到1的afterHandle
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。