精华内容
下载资源
问答
  • 多个拦截器执行顺序
    更多相关内容
  • 拦截器原理多个拦截器执行顺序

    千次阅读 2021-06-08 20:56:42
    拦截器原理多个拦截器执行顺序 1、根据当前请求,找到**HandlerExecutionChain【可以处理请求的handler以及handler的所有 拦截器】 2、先来顺序执行 所有拦截器的 preHandle方法 1、如果当前拦截器prehandler返回为...

    拦截器原理多个拦截器执行顺序

    1、根据当前请求,找到**HandlerExecutionChain【可以处理请求的handler以及handler的所有 拦截器】

    2、先来顺序执行 所有拦截器的 preHandle方法

    • 1、如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle
    • 2、如果当前拦截器返回为false。直接 倒序执行所有已经执行了的拦截器的 afterCompletion;

    3、如果任何一个拦截器返回false。直接跳出不执行目标方法

    4、所有拦截器都返回True。执行目标方法

    5、倒序执行所有拦截器的postHandle方法。

    6、前面的步骤有任何异常都会直接倒序触发 afterCompletion

    7、页面成功渲染完成以后,也会倒序触发 afterCompletion

    image.png

    展开全文
  • //放行路径 //设置第二个拦截器 registry.addInterceptor(authenticationInterceptor2()) .addPathPatterns("/api/get")//拦截路径 .excludePathPatterns("/api/login");//放行路径 /** * 拦截器的顺序根据你加入的...
    package com.example.jwt2021921.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * @Auther: 叶川江
     * @Date: 2021/9/18 12:44
     * @Description: 拦截器,拦截所有资源
     */
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //设置第一个拦截器
            registry.addInterceptor(authenticationInterceptor1())
                    .addPathPatterns("/api/get")//拦截路径
            .excludePathPatterns("/api/login");//放行路径
            //设置第二个拦截器
            registry.addInterceptor(authenticationInterceptor2())
                    .addPathPatterns("/api/get")//拦截路径
                    .excludePathPatterns("/api/login");//放行路径
    
            /**
             * 拦截器的顺序根据你加入的顺序来的
             * authenticationInterceptor1,authenticationInterceptor2就是拦截器具体逻辑的内容的2个类,需要实现implements HandlerInterceptor
             * 拦截路径个过滤路径都是自己看业务定义
             */
        }
    
    
        @Bean
        public AuthenticationInterceptor authenticationInterceptor1() {
            return new AuthenticationInterceptor();
        }
        @Bean
        public AuthenticationInterceptor authenticationInterceptor2() {
            return new AuthenticationInterceptor();
        }
    }
    
    

    乾坤未定,你我皆是黑马,奥里给冲

    展开全文
  • Spring MVC多个拦截器执行顺序

    为了对比多个拦截器的执行顺序,先创建两个拦截器打比方

    第一个拦截器:

    public class MyInterceptor implements HandlerInterceptor {
        /**
         * 目标方法执行之前执行
         *
         * @return true不拦截,如果为false,那么后面一连串方法都不会执行(Controller。postHandle。afterCompletion。。等等)
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("preHandle1.....");
                return true;
        }
    
        /**
         * 在目标执行之后 视图返回之前执行
         */
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle1.....");
        }
    
        /**
         * 在整个流程都执行完毕后执行,记录日志、异常等(用的不多)
         */
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion1.....");
        }
    }

    第二个拦截器:

    public class MyInterceptor2 implements HandlerInterceptor {
        /**
         * 目标方法执行之前执行
         *
         * @return true不拦截,如果为false,那么后面一连串方法都不会执行(Controller。postHandle。afterCompletion。。等等)
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle2.....");
            return true;
        }
    
        /**
         * 在目标执行之后 视图返回之前执行
         */
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle2.....");
        }
    
        /**
         * 在整个流程都执行完毕后执行,记录日志、异常等(用的不多)
         */
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion2.....");
        }
    }

    Spring MVC配置文件中配置拦截器:先配置拦截器1,再配置拦截器2

    <!--    配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor"/>
            </mvc:interceptor>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor2"/>
            </mvc:interceptor>
        </mvc:interceptors>
        <!--配置拦截器-->

    启动Tomcat服务并访问相应资源,运行结果:

     调换SpringMVC配置文件拦截器的顺序:先配置拦截器2,再配置拦截器1

    <!--    配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor2"/>
            </mvc:interceptor>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
        <!--配置拦截器-->

    再次运行Tomcat服务执行结果:

    preHandle2.....
    preHandle1.....
    postHandle1.....
    postHandle2.....
    afterCompletion1.....
    afterCompletion2.....

    多个拦截器执行preHandle的顺序与Spring MVC配置文件中的配置顺序有关,将配置文件还原到拦截器1~拦截器2

    <!--    配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor"/>
            </mvc:interceptor>
            <mvc:interceptor>
                <!--            拦截路径,对哪些资源执行拦截操作  /**代表对所有都拦截-->
                <mvc:mapping path="/**"/>
                <bean class="com.interceptor.MyInterceptor2"/>
            </mvc:interceptor>
        </mvc:interceptors>
        <!--配置拦截器-->

    当第一个拦截器的preHandle方法返回true时,才会继续向下调用下一个拦截器的preHandle

    修改一下代码,将第一个拦截器的preHandle方法改成false,试着运行程序,看看拦截器2的preHandle是否执行:

    public class MyInterceptor implements HandlerInterceptor {
        /**
         * 目标方法执行之前执行
         *
         * @return true不拦截,如果为false,那么后面一连串方法都不会执行(Controller。postHandle。afterCompletion。。等等)
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("preHandle1.....");
                return false;
        }
    
        /**
         * 在目标执行之后 视图返回之前执行
         */
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle1.....");
        }
    
        /**
         * 在整个流程都执行完毕后执行,记录日志、异常等(用的不多)
         */
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion1.....");
        }
    }
    

    执行结果:

    只有preHandle1被执行 ,说明拦截器1的preHandle返回false拦截器2压根就不会执行,甚至拦截器1的postHandle和afterCompletion也不会执行

    展开全文
  • 我们可以看出多个拦截器执行顺序为 preHandle:从第一个往后执行 postHandle:从后往前执行 afterCompletion:从后往前执行 这里的先后为配置拦截器的顺序: <mvc:interceptors> <mvc:interceptor>...
  • springmvc的拦截器实现HandlerInterceptor接口后,会有三个抽象方法需要实现,分别为...1、当俩个拦截器都实现放行操作时,顺序为preHandle 1,preHandle 2,postHandle 2,postHandle 1,afterCompletion 2,afterCo
  • 源码分析Spring boot拦截器执行顺序

    千次阅读 2020-07-31 22:33:32
    项目中存在多个拦截器,那么他们的执行顺序是如何的? 如何设置拦截器执行顺序? 二、前期准备 项目结构: 主要代码如下,有拦截器 A、B、C,代码基本与下一致: /** * 拦截器 A * * @author ouyang * @...
  • 目录 前言: 1. 为什么项目Controller的接口方法...4. 多拦截器处理顺序? 5. 理论知识 5.1 prehandle 5.2 拦截器的基本概念? 5.3 什么是servlet容器? 5.4 什么是过滤器? 5.4 拦截器与过滤器的区别 5.5 ...
  • 定义3个拦截器,如下: WebInterceptor1: import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;...
  • 多个拦截器执行顺序

    千次阅读 2021-11-30 10:10:56
    一、拦截器简介 1、拦截器定义 ...二、多个拦截器用法 1、编写两个拦截器 自定义类实现HandlerInterceptor接口 1)OneInterceptor 拦截器 import org.slf4j.Logger; import org.slf4j.LoggerFacto
  • 前言 最近朋友和我提了一个挺有趣的问题:他们有个项目用了他们框架部提供的jwt token校验填充组件,实现原理大概是,通过springboot拦截器来...他的思路就是他也写一个拦截器,在这个拦截器里面做业务填充。这边有个
  • 通过mybatis 工作流程 窥探拦截器执行顺序 调用拦截器 executor.query(ms, wrapCollection(parameter), rowBounds, handler); 这一行是通过执行器的代理对象 去执行query的方法。 官网提供的拦截器插件文档 Executor...
  • springmvc多个拦截器执行顺序

    千次阅读 2018-03-29 16:53:44
    springmvc的拦截器实现HandlerInterceptor接口后,会有三个抽象方法需要实现,分别为方法前执行preHandle,方法后postHandle,页面渲染后afterCompletion。...1、当俩个拦截器都实现放行操作时,顺序为preHandle...
  • 配置图文,超详细!!SpringMVC拦截器Interceptor详解,多个拦截器执行顺序,拦截器进行权限判断和日志记录,拦截器和过滤器的区别
  • 多个拦截器执行流程

    千次阅读 2019-05-27 22:41:07
    多个拦截器执行顺序怎样的。 假设有两个拦截器Interceptor1,Interceptor2.Interceptor1配置在前。 则执行顺序如下: 如图可以看出,当多个拦截器工作时,他们的perHandle()方法会按照配置文件中的拦截器的配置...
  • retrofit okHttp拦截器执行顺序

    千次阅读 2019-03-27 14:49:49
    拦截器执行顺序是根据添加顺序来执行,谁先添加,先执行哪个拦截器 .addInterceptor(new BaseInterceptor()) .addInterceptor(new EncryptInterceptor()) .addInterceptor(new HttpCacheInterce...
  • spring mvc 多个拦截器执行顺序

    千次阅读 2020-02-14 00:50:21
  • springMVC中在配置拦截器的时候,拦截器的每个方法在哪里执行?如果有多个拦截器,那么他们每个方法的执行顺序怎么判断
  • 当配置多个拦截器时拦截器1:拦截器2:当没有设置路径的时候,拦截器都会执行到,那么执行顺序为:
  • SpringMVC拦截器执行顺序原理解释

    千次阅读 2019-03-04 23:32:51
    个拦截器的preHandle()方法都返回true 两个拦截器测试 package fei.springmvc.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView...
  • 执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework....
  • axios拦截器执行顺序的源码解释

    千次阅读 2020-08-20 17:59:20
    axios拦截器执行顺序的源码解释 我们先来看一段代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial...
  • 过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。 这里重点说下过滤器! 在我们自定义的过滤器中都会实现一 doFilter()方法,这方法有一...
  • SpringMVC 拦截器使用方法 SpringMVC拦截器执行顺序理解 一、拦截器作用 1、Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。 二、使用方法 1、依赖 ...
  • 配置拦截器多个拦截器执行步骤 拦截器的作用 自定义拦截器的步骤 1.编写普通类实现HandlerInterceptor以及方法说明 public class HandlerInterceptorDemo1 implements HandlerInterceptor { @Override...
  • 拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。 与过滤器不同的是,...
  • mybatis中拦截器执行顺序

    万次阅读 2018-07-19 08:48:47
    mybatis中拦截器执行顺序 拦截器初始化 在org.apache.ibatis.builder.xml.XMLConfigBuilder中: private void pluginElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,343
精华内容 28,137
关键字:

多个拦截器执行顺序