zoukankan      html  css  js  c++  java
  • springboot filter and interceptor

    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 总体调用流程

       

      (图片来源 https://blog.csdn.net/hanziang1996/article/details/79655140

    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打印日志

  • 相关阅读:
    除去String字符串里面指定的字符串
    JSON总结(java篇)
    关于tomcat文件下载配置
    在多行列表中id同名的<a>标签点击事件处理方法
    java Properties异常:Malformed uxxxx encoding.
    关于An association from the table refers to an unmapped class
    Java实现Mysql数据库自动备份
    Could not publish server configuration for Tomcat v6.0 Server at localhost.
    MySQL备份命令mysqldump参数说明与示例
    图解 | 原来这就是网络
  • 原文地址:https://www.cnblogs.com/gc65/p/10087040.html
Copyright © 2011-2022 走看看