示意图

springboot 如何增加filter_字段

简述

1.  通过@Bean将filter对象增加到bean容器中

2.  Tomcat启动,servletContext执行初始化动作。通过查询beanType为Filter的对象,将其封装为FilterRegistrationBean,统一执行其onStartUp方法,实现将filter添加到servletContext中

3.  请求进入,创建filterChain,依次执行filter.

关键代码入口

1.  扫描所有符合条件的bean (filter,servlet),为其封装为RegistrationBean

org.springframework.boot.web.servlet.ServletContextInitializerBeans#addAdaptableBeans

2.  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext#selfInitialize 找到所有的ServletRegistrationBean对象,依次调用onStartup方法

3.  filter注册到context org.springframework.boot.web.servlet.AbstractFilterRegistrationBean#addRegistration

4.  ServletContextInitializerBeans 实现了AbstractCollection集合类,重写iterator方法。实际元素存储在ServletContextInitializerBeans#sortedList字段中