-
2019-03-14 15:03:50更多相关内容
-
拦截器原理多个拦截器执行顺序
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
-
springboot多个拦截器执行顺序
2021-09-24 11:23:47//放行路径 //设置第二个拦截器 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多个拦截器执行顺序
2022-03-04 06:47:45Spring 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也不会执行
-
多个拦截器执行顺序原理(源码分析)
2020-03-07 23:24:39我们可以看出多个拦截器的执行顺序为 preHandle:从第一个往后执行 postHandle:从后往前执行 afterCompletion:从后往前执行 这里的先后为配置拦截器的顺序: <mvc:interceptors> <mvc:interceptor>... -
springmvc多个拦截器执行顺序及拦截器使用方法
2017-08-16 09:15:38springmvc的拦截器实现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 * @... -
Java web项目自定义多个拦截器的执行顺序,以及拦截器的作用
2019-10-12 16:38:12目录 前言: 1. 为什么项目Controller的接口方法...4. 多拦截器处理顺序? 5. 理论知识 5.1 prehandle 5.2 拦截器的基本概念? 5.3 什么是servlet容器? 5.4 什么是过滤器? 5.4 拦截器与过滤器的区别 5.5 ... -
了解下多个拦截器的执行顺序
2020-08-12 22:07:48定义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 -
聊聊如何让springboot拦截器的执行顺序按我们想要的顺序执行
2022-02-23 14:19:28前言 最近朋友和我提了一个挺有趣的问题:他们有个项目用了他们框架部提供的jwt token校验填充组件,实现原理大概是,通过springboot拦截器来...他的思路就是他也写一个拦截器,在这个拦截器里面做业务填充。这边有个 -
MyBatis 拦截器执行顺序
2021-08-04 16:03:32通过mybatis 工作流程 窥探拦截器执行顺序 调用拦截器 executor.query(ms, wrapCollection(parameter), rowBounds, handler); 这一行是通过执行器的代理对象 去执行query的方法。 官网提供的拦截器插件文档 Executor... -
springmvc多个拦截器的执行顺序
2018-03-29 16:53:44springmvc的拦截器实现HandlerInterceptor接口后,会有三个抽象方法需要实现,分别为方法前执行preHandle,方法后postHandle,页面渲染后afterCompletion。...1、当俩个拦截器都实现放行操作时,顺序为preHandle... -
【SSM - SpringMVC篇】09 SpringMVC拦截器Interceptor详解,多个拦截器的执行顺序,拦截器进行权限判断和...
2020-10-16 23:34:32配置图文,超详细!!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... -
springmvc多个拦截器中拦截器方法的执行顺序
2017-08-28 10:14:26 -
spring mvc 多个拦截器的执行顺序
2020-02-14 00:50:21 -
springMVC中拦截器执行时机和执行顺序分析
2022-05-04 10:45:56springMVC中在配置拦截器的时候,拦截器的每个方法在哪里执行?如果有多个拦截器,那么他们每个方法的执行顺序怎么判断 -
当有多个拦截器时拦截器的执行顺序
2018-04-09 16:08:53当配置多个拦截器时拦截器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... -
Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序
2020-02-08 14:00:36执行顺序 源代码 拦截器类 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:20axios拦截器执行顺序的源码解释 我们先来看一段代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial... -
拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
2021-07-29 02:59:33过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。 这里重点说下过滤器! 在我们自定义的过滤器中都会实现一个 doFilter()方法,这个方法有一个... -
SpringMVC 拦截器使用方法 SpringMVC拦截器执行顺序理解
2020-01-09 09:52:03SpringMVC 拦截器使用方法 SpringMVC拦截器执行顺序理解 一、拦截器作用 1、Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。 二、使用方法 1、依赖 ... -
SprinMVC中的拦截器以及多个拦截器的执行步骤
2019-06-25 16:29:54配置拦截器多个拦截器的执行步骤 拦截器的作用 自定义拦截器的步骤 1.编写普通类实现HandlerInterceptor以及方法说明 public class HandlerInterceptorDemo1 implements HandlerInterceptor { @Override... -
拦截器Interceptor的配置-拦截器Interceptor的使用-拦截器Interceptor的详解-多个拦截器的执行流程
2021-09-20 09:51:44将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。 与过滤器不同的是,... -
mybatis中拦截器执行顺序
2018-07-19 08:48:47mybatis中拦截器执行顺序 拦截器初始化 在org.apache.ibatis.builder.xml.XMLConfigBuilder中: private void pluginElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : ...