Spring HandlerInterceptor实现原理代码解析

HandlerInterceptor 在这里看到这个HandlerExecutionChain对interceptor的调用,在这里深入看一下。

HandlerExecutionChain 就是一个类,绑定了Handler( 对应的Controller) 和 Interceptors , 所以作用就是对Controller前后执行interceptors, 类似Filter

几个问题:

1. interceptor调用位置?

1 2 3 对应调用 handlerInterceptor preHandle, postHandle, afterCompletion

先看第一行的:

进到对应的interceptor实现类,preHandler返回true, 如果返回false, 就会到DispatcherServlet就直接return了。

看第二行没有特别的:

由于它只重写了preHandle

所以走到它父类的postHandle了。方法是空的。

第三行和第二行一样不赘述了。

以上就是执行位置。

所以如果实现HandlerInterceptor , preHandle 应该返回true, 具体要拦截的内容写在return true之前就行。 postHandle和afterCompletion 都是void方法,直接在里面写需要拦截的内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 处理程序 PageHandlerFactory-Integrated 在其模块列表中有一个错误模块 ManagedPipelineHandler

    开发web项目时需要安装IIS,在安装好IIS的Windows2008 r2本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示"处理程序"PageHandlerFactory-Integrated"在其模块列表中有一个错误模块"ManagedPipelineHandler" 导致这种问题的原因是ASP.NET没有成功注册到IIS中,很有可能是先安装.Net Framework,然后安装IIS.为了避免此问题发生,要先安装I

  • Mybatis-Plus3.2.0 MetaObjectHandler 无法进行公共字段全局填充

    问题描述 最近在做的这个项目架构组对于配置文件决定,采取的是 .xml 配置文件 一个数据中台项目,因为部署环境比较复杂,可能需要适配阿里.腾讯.开源等环境和机房,所以配置文件和启动类为三类 之前写的 MetaObjectHandler 都是采用的 SpringBoot 配置方式开发,突然换成 .xml 配置文件,还是有不少坑的,其中就有配置的 MetaObjectHandler 死活不起作用 ⬆️

  • Python logging模块handlers用法详解

    一.handlers是什么? logging模块中包含的类 用来自定义日志对象的规则(比如:设置日志输出格式.等级等) 常用3个子类:StreamHandler.FileHandler.TimedRotatingFileHandler 二.handlers基础应用 2.1 StreamHandler 控制台输出日志 import logging #创建一个logger日志对象 logger = logging.getLogger('test_logger') logger.setLevel(lo

  • 浅谈SpringMVC HandlerInterceptor诡异问题排查

    发现问题 最近在进行压测发现,有一些接口时好时坏,通过sentry日志平台及sky walking平台跟踪发现,用户张三获取到的用户上下文确是李四. 代码走读 用户登录下上文 /** * 用户登录下上文 * * @author : jamesfu * @date : 22/5/2019 * @time : 9:18 AM */ @Data public class UserContext { private final static ThreadLocal<UserContext> threa

  • MyBatis自定义typeHandler的完整实例

    自定义typeHandler 对于自定义typeHandler来说,需要在配置文件中注册typeHandlers 然后需要实现TypeHandler接口, 一个例子 首先编写调度的处理类 package com.ming.MyBatis; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import org.apache.logging.log4j.LogManager; imp

  • python通过TimedRotatingFileHandler按时间切割日志

    通过TimedRotatingFileHandler按时间切割日志 线上跑了一个定时脚本,每天生成的日志文件都写在了一个文件中.但是日志信息不可能输出到单一的一个文件中. 原因有二:1.日志文件越来越大会影响系统的性能.2.日志文件格式不够清晰,比如我想看今天的日志,不太方便找到的今天的日志信息(即使对日志输出做了时间提示) 通过设置 TimedRotatingFileHandler 进行日志按周(W).天(D).时(H).分(M).秒(S)切割. 先看一个简单例子: import time i

  • Flutter permission_handler 权限插件的使用详解

    编译环境:Flutter 版本v1.12.hotfix9 dart SDK:2.7.2 1 pubspec.yaml中引入: #  权限   permission_handler: ^3.2.0 ios中info.plist配置(根据权限情况使用): <!-- Permission options for the `location` group --> <key>NSLocationWhenInUseUsageDescription</key> <string&

  • Python Handler处理器和自定义Opener原理详解

    我们之前一直都在使用的urlopen,这是一个特殊的opener(也就是模块帮我们构建好的). 但是基本的urlopen()方法不支持代理.cookie等其他的HTTP/HTTPS高级功能.所以要支持这些功能: 1.使用相差的Handler处理器来创建特定功能的处理器对象: 2.然后通过urllib.request.build_opener()方法,创建自定义opener对象 3.使用自定义的opener对象,调用open()方法发送请求. 如果程序里所有的请求都使用自定义的opener,可以使

  • Spring HandlerInterceptor实现原理代码解析

    HandlerInterceptor 在这里看到这个HandlerExecutionChain对interceptor的调用,在这里深入看一下. HandlerExecutionChain 就是一个类,绑定了Handler( 对应的Controller) 和 Interceptors , 所以作用就是对Controller前后执行interceptors, 类似Filter 几个问题: 1. interceptor调用位置? 1 2 3 对应调用 handlerInterceptor preHa

  • Java中LinkedList原理代码解析

    本文研究的主要是Java中LinkedList原理的相关内容,具体介绍如下. 一句话概括,Java中的LinkedList其实就是使用双向链表,LinkedList的基本操作就是对双向链表的操作. 上面可以清晰的看出,链表中每个元素对应一个节点,节点里面包含三部分,一个是前一个节点的引用,一个是元素内容,一个是后一个节点的引用. 向链表中添加元素的过程就是在链表尾部追加一个节点 void linkLast(E e) { final Node<E> l = last; final Node<

  • Spring Boot 底层原理基础深度解析

    目录 1. 底层注解@Configuration 2. 底层注解@Import 3. 底层注解@Conditional 1. 底层注解@Configuration @Configuration 注解主要用于给容器添加组件(Bean),下面实践其用法: 项目基本结构: 两个Bean组件: User.java package com.menergy.boot.bean; /** * 用户 */ public class User { private String name; private Inte

  • Jquery cookie插件实现原理代码解析

    Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的本地终端上的数据. jQuery提供了一个十分简单的插件(名称也是Cookie)来管理网站的Cookie. 下载地址:http://github.com/carhartl/jquery-cookie 例子: 当在用户名字段填写用户名后,单击下面的"记住用户名"复选框后,再次打开这个页面,发现用户名字段上已经被自动赋值(之前所填写的用户名) <!DOCTYPE html PUBLIC "-/

  • Java 内省introspector相关原理代码解析

    1. JavaBean (有get/set属性,和默认构造器等规范的java类) import java.util.Date; public class Student { // 这是 字段 private String name; private int age; private Date birthday; // 这是 属性 //(get.set开头的方法,getName.setName算一个属性,单独一个set或get也算一个属性) // 属性名为 去掉get.set后 第一个大写字母变小

  • Spring拦截器HandlerInterceptor接口代码解析

    Spring的HandlerMapping支持拦截器,拦截器必须实现HandlerInterceptor接口,此接口里面有下面3中方法: 1.preHandle()处理器执行前被调用,方法返回true标识继续调用其他拦截器或者处理器,返回false表示中断流程,后续的拦截器和处理器不再执行. 2.postHandle()处理器执行后,视图执行前调用,此时而已通过ModelAndView对象对数据模型数据进行处理或对视图进行处理. 3.afterCompletion()整个过程结束后调用,比如性能

  • Spring @Conditional注解原理解析

    这篇文章主要介绍了Spring @Conditional注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @Conditional是Spring4新提供的注解,它的作用是根据某个条件加载特定的bean. 我们需要创建实现类来实现Condition接口,这是Condition的源码 public interface Condition { boolean matches(ConditionContext var1, AnnotatedT

  • Spring注解@RestControllerAdvice原理解析

    这篇文章主要介绍了Spring注解@RestControllerAdvice原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 前段时间部门搭建新系统,需要出异常后统一接口的返回格式,于是用到了Spring的注解@RestControllerAdvice.现在把此注解的用法总结一下. 用法 首先定义返回对象ResponseDto package com.staff.points.common; import lombok.Data;

  • Spring核心容器IOC原理实例解析

    这篇文章主要介绍了Spring核心容器IOC原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一 .BeanFactory Spring Bean 的创建是典型的工厂模式,这一系列的 Bean 工厂,也即 IOC 容器为开发者管理对象 间的依赖关系提供了很多便利和基础服务.最基本的 IOC 容器接口 BeanFactory,来看一下它的源码: public interface BeanFactory { //对 FactoryBean

  • spring @Component注解原理解析

    这篇文章主要介绍了spring @Component注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.@controller 控制器(注入服务) 2.@service 业务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>) 5.@Comp

随机推荐