博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot filter and interceptor
阅读量:7012 次
发布时间:2019-06-28

本文共 1478 字,大约阅读时间需要 4 分钟。

1.1  filter、interceptor

1.1.1    filter 过滤器

1.1.1.1  实现方法

init(FilterConfig paramFilterConfig) - 当容器初始化filter时调用,该方法在filter的生命周期只会被调用一次(单例)。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain) – web容器每一次请求都会调用该方法。注意这里是通过容器的回调进行调用的。FilterChain用来调用下一个过滤器。

void destroy() - 当容器销毁Filter实例时调用该方法,可以在方法中销毁资源,该方法在Filter的生命周期只会被调用一次。

1.1.1.2    调用顺序

  HttpRequest —-> Filter —-> Servlet —-> Controller/Action/… —-> Filter —-> HttpResponse

1.1.1.3   debug调用顺序

  

  

  1.1.2     interceptor 拦截器

1.1.2.1  实现方法

preHandle() - 在handler执行之前,返回boolean值,true表示继续执行,false为停止执行并返回。

postHandle() - 在处理程序执行之后,可以在返回之前对返回的结果进行修改

afterCompletion() - 在请求完全结束后调用,可以用来统计请求耗时等等

1.1.2.2 调用顺序

请求到达DispatcherServlet

DispatcherServlet发送至拦截器,执行preHandle

请求到达控制器

请求正常结束后执行postHandle,afterCompletion

请求异常结束则只执行afterCompletion

HttpRequest —-> DispactherServlet —-> HandlerInterceptor —->Controller—-> HandlerInterceptor —-> HttpResponse

  1.1.2.3  debug图解顺序

    代码调用逻辑如下图:1,3是preHandle,和postHandle。 2是反射调用controller对应的实际要执行的方法, 4是afterCompletion

    

    

             下面是preHandle调用栈

    

 

1.1.3    过滤器拦截器对比

1.1.3.1 总体调用流程

   

  (图片来源 )

1.1.3.2  对比

  过滤器由servlet容器(tomcat、jetty…)通过回调的方式调用的(进入spring框架之前)

  拦截器是由spring框架的DispatcherServlet调用的,基于动态代理

  拦截器可以在方法调用前后调用,过滤器多了一种(可以在异常之后调用)

  过滤器依赖于servlet容器

        拦截器依赖于spring容器

1.1.3.3    作用

两者的应用场景大致相同,可以做如下任务:

      登录认证

      请求记录(次数,时间,url

      mdc打印日志

l  过滤器依赖于servlet容器

l  拦截器依赖于spring容器

1.1.1.1             作用

两者的应用场景大致相同,可以做如下任务:

      登录认证

      请求记录(次数,时间,url

      mdc打印日志

 

转载于:https://www.cnblogs.com/gc65/p/10087040.html

你可能感兴趣的文章
芝麻HTTP:爬虫的基本原理
查看>>
python利用json处理数据
查看>>
动态增减表单项(vue+element)
查看>>
Multi Task Learning在工业界如何更胜一筹
查看>>
7.1 安装软件包的三种方法 7.2 rpm包介绍 7.3 rpm工具用法 7.4 yum工具用法 7.5 yum搭建本地仓库...
查看>>
图(graph)
查看>>
1. Spring Boot 启动后执行一些操作
查看>>
四元数基础和DX9的函数
查看>>
sharding-jdbc源码解析之sql单表或绑定表路由
查看>>
使用aliyun提供的迁移工具把本地的虚拟机或主机迁移到阿里云上去
查看>>
干货|比特币如何产生与交易
查看>>
技术工坊|数字货币钱包的设计要素与应用案(上海)
查看>>
Blockathon2018(上海)顺利结束,9个项目打开区块链落地新思路
查看>>
第六届中华灯谜文化节暨第二届中华元宵灯谜节在安徽合肥成功举办
查看>>
BCH希望能和其它的数字货币共同进步
查看>>
CentOS 6.5系统安装配置图解教程以及配置网络
查看>>
Cloudflare能检测HTTPS并拦截MITMEngine
查看>>
独家解密:阿里大规模数据中心性能分析
查看>>
一线实践 | 借助混沌工程工具 ChaosBlade 构建高可用的分布式系统
查看>>
智能合约就是程序
查看>>