多个类实现 Filter 接口后的执行顺序
在标准 Filter 实现中,当存在多个 Filter 时,它们的 doFilter 方法将按其定义的顺序依次执行。这背后的原因在于:
- FilterRegistrationBean: Spring Boot 创建每个 Filter 的实例并将其注册到一个称为 FilterRegistrationBean 的 Bean 中。
- ServletContextInitializer: Spring Boot 还会注册一个 ServletContextInitializer bean,该 bean会在应用程序启动期间将这些 FilterRegistrationBean 添加到 Servlet 容器中。
- FilterChain: Servlet 容器负责管理 Filter 链,并根据注册的顺序调用各个 Filter 的 doFilter 方法。
因此,当 Spring Boot 扫描到实现了 Filter 接口的多个类时,它将为每个类创建一个 FilterRegistrationBean,并按照它们在容器中注册的顺序将它们添加到 Filter 链中。当请求到达应用程序时,Servlet 容器会依次调用这些 Filter 的 doFilter 方法。
在您提供的示例中,XssFilter 和 TestFilter 都实现了 Filter 接口,这意味着它们将被添加到 Filter 链中。当访问接口时,这两个类的 doFilter 方法将首先按顺序打印其类名,然后调用 chain.doFilter 方法将请求转发到下一个过滤器或目标。
由于 Filter 链是由 Servlet 容器管理的,因此它确保多个 Filter 的 doFilter 方法按预期的顺序执行,而无需任何特定代码或 Spring Boot 特定配置。
以上就是Spring Boot中多个Filter的执行顺序是怎样的?的详细内容,更多请关注其它相关文章!