SSM04 —— Interceptor

本文记录了SpringMVC拦截器的相关概念和简单使用方法

拦截器(interceptor)的作用

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

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

拦截器和过滤器的区别

拦截器简单使用

自定义拦截器很简单,只有如下三步:

  • 创建拦截器类实现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
    public class MyInterceptor1 implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
    System.out.println("preHandle.....");
    String param = request.getParameter("param");
    if("yes".equals(param)){
    return true;
    }else{
    request.getRequestDispatcher("/error.jsp").forward(request,response);
    return false;//返回true代表放行 返回false代表不放行
    }
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    modelAndView.addObject("name","itheima");
    System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    System.out.println("afterCompletion....");
    }
    }
  • 配置拦截器(spring-mvc.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    <!--配置拦截器-->
    <mvc:interceptors>
    <mvc:interceptor>
    <!--对哪些资源执行拦截操作-->
    <mvc:mapping path="/**"/>
    <bean class="com.itheima.interceptor.MyInterceptor1"/>
    </mvc:interceptor>
    </mvc:interceptors>
  • 测试拦截器的拦截效果

多拦截器操作

拦截的顺序与在配置文件(spring-mvc.xml)中配置的顺序有关

拦截器方法说明

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022 ZHU
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信