> 文档中心 > 8.SpringMVC实现自定义拦截器

8.SpringMVC实现自定义拦截器


8.SpringMVC实现自定义拦截器

1 拦截器(interceptor)的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截
方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实
现。

2 拦截器和过滤器区别

关于interceptor和filter的区别,如图所示:

8.SpringMVC实现自定义拦截器

3.实现过程

步骤分析:

  1. 创建拦截器类实现HandlerInterceptor接口
  2. 配置拦截器
  3. 测试拦截器的拦截效果

3.1创建拦截器类实现HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {    /**     *  preHandle: 在目标方法执行之前 进行拦截   return false:不放行     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle1...."); return true;    }    /**     *postHandle: 在目标方法执行之后,视图对象返回之前,执行的方法     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle1....");    }    /**     * afterCompletion:在流程都执行完成后,执行的方法     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion1....");    }}

3.2配置拦截器

<!--    配置拦截器-->    <mvc:interceptors> <mvc:interceptor>     <!--对哪些资源执行拦截操作 path="/**"表示对controller层所有方法进行拦截 -->     <mvc:mapping path="/**" />     <bean class="com.weihong.interceptor.MyInterceptor" /> </mvc:interceptor>    </mvc:interceptors>

3.3测试拦截器的拦截效果

    @RequestMapping("/target")    public String targetMethed(){ System.out.println("目标方法执行了"); return "interceptor";    }

3.4编写jsp页面

    Title    

success~~~~~~

3.5测试结果

8.SpringMVC实现自定义拦截器

4. 拦截器链

开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。开发步骤和单个拦截器是一样的,只不过注册的时候注册多个,注意这里注册的顺序就代表拦截器执行的顺序。

同上,再编写一个MyHandlerInterceptor2操作,测试执行顺序:

<!--配置拦截器--><mvc:interceptors>  <mvc:interceptor>    <!--拦截器路径配置-->    <mvc:mapping path="/**"/>    <!--自定义拦截器类-->    <bean class="com.lagou.interceptor.MyInterceptor1"></bean>  </mvc:interceptor>  <mvc:interceptor>    <!--拦截器路径配置-->    <mvc:mapping path="/**"/>    <!--自定义拦截器类-->    <bean class="com.lagou.interceptor.MyInterceptor2"></bean>  </mvc:interceptor></mvc:interceptors>

5. 知识小结

拦截器中的方法说明如下:

8.SpringMVC实现自定义拦截器