拦截器的运行流程分析(项目源码寻踪)

Posted 364.99°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拦截器的运行流程分析(项目源码寻踪)相关的知识,希望对你有一定的参考价值。

1.背景

  • 我有两个后台,后台A需要调用后台B的接口,以实现从B的数据库中获取数据,并将数据存储到A的数据库中
  • 为了保证安全性,我在A中定义了一个SignUtil的工具类根据一定规则生成签名,并将签名传入请求参数
  • 在B中,为了验证参数和签名,我定义了两个拦截器来分别验证参数和签名(ParamsInterceptor(extends HandlerInterceptor)、SignInterceptor(extends HandlerInterceptorAdapter))
  • 并在WebMvcConfig中注册了两个拦截器

2.源码追踪分析工作流程

  • 后台A的参数已经传到了B,并顺利通过了参数拦截器和签名拦截器的preHandle验证(两个preHandle都返回true),然后就交由 HandlerExecutionChainapplyPreHandle 继续处理:
    • 先获取本工程中所有的Interceptor的类信息(必须是所有拦截器的preHandle都处理完之后才会跑到HandlerExecutionChain的applyPreHandle)
    • 判断当前前置处理器返回的数据是否为true,如果为true,就将interceptorIndex置为i,并在遍历完所有拦截器的prehandle之后,如果所有的prehandle都返回true,则这里就返回true,否则就返回false
  • 执行完HandlerExecutionChainapplyPreHandle之后,就交由 DispatcherServlet 处理了
    • 判断applyPreHandle返回的值,如果返回值为false就直接结束,也就不会分配实际的方法给你处理请求了
    • 如果上述判断返回为trueDispatcherServlet 就会为请求分配具体的处理方法(实际调用处理程序)进行处理
    • 然后程序就会来到后台A中处理改请求的接口方法处,继续运行:

其流程如下图:

以上是关于拦截器的运行流程分析(项目源码寻踪)的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程

内核调试技巧-逆向寻踪,揭开 LACP 协议流程的神秘面纱

源码分析spring-mvc启动流程

源码分析-手写springMVC框架@RequestMapping和@Controller注解

Spring框架进阶Spring V3.0 AOP源码分析流程

Spring源码剖析-Transactional 事务执行流程