Maxon's Blog

SpringMVC 拦截器

2

SpringMVC 拦截器

拦截器(Interceptor)作用

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

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

拦截器和过滤器区别

过滤器(Filter)拦截器(Interceptor)
使用范围是Servlet规范中的一部分,任何Java Web项目都可以使用是SpringMVC框架的一部分,只有使用了SpringMVC框架的工程可以使用
拦截范围在Url-pattern中配置了 /* 之后,可以对所有要访问的资源拦截<mvc:mapping path=" "/> 中配置了 /** 之后,也可以对所有资源进行拦截,但是可以通过<mvc:exclude-mapping path=" "/>排除不需要拦截的资源

实现步骤

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

    Java
    public class MyInterceptor1 implements HandlerInterceptor {
        @Override
        //目标方法执行之前
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("PreHandler exec...........");
            return true;//false 直接拦截  true 放行
        }
        @Override
        //目标方法执行之后  视图返回之前
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandler exec...........");
    
        }
        @Override
        //整个流程都执行完毕之后执行
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion exec...........");
    
        }
    }	
    
  • 配置拦截器

    Xml
    <!--配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--对哪些资源执行拦截操作-->
                <mvc:mapping path="/**"/>
                <bean class="me.aowu.controller.me.aowu.interceptor.MyInterceptor1"/>
            </mvc:interceptor>
        </mvc:interceptors>
    
  • 测试拦截器的拦截效果

image-20221010230044130

执行顺序(层包)!!

image-20221010232152942