SpringBoot2.x将Filter过滤器添加到容器

如题所述

第1个回答  2022-06-07

JAVA && Spring && SpringBoot2.x — 学习目录

SpringBoot 关于Filter、Servlet、Listener配置—官网

在使用嵌入式容器中(内置Tomcat),类上含有 @WebServlet 、 @WebFilter 和 @WebListener 注解时,可以通过启动类上的 @ServletComponentScan 注解进行扫描。

需要注意的是:@ServletComponentScan 在独立容器中没有任何效果,而是使用容器的内置发现机制。

任何的 Servlet 、 Filter 或者 Listener 实例都是在容器中注册的,可以使用 @Component 或者 @Bean
默认情况下,如果上下文只包含一个Servlet,则将其映射为 / ,在多个Servlet bean的情况下,bean名称用作路径前缀,过滤器映射到 /* 。

自定义Filter通过@Bean注解后,被SpringBoot自动注册到容器的Filter chain中,并且拦截路径为 /* ,这样导致的结果是:所有的URL都会被自定义的Filter过滤。

可以使用 ServletRegistrationBean 、 FilterRegistrationBean 以及 ServletListenerRegistrationBean 类进行完全的控制。

Spring Boot对Filter、Servlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。