任何
Servlet,Filter或Servlet *Listener实例,它是一个Spring
bean将与嵌入容器注册。如果要application.properties在配置过程中引用一个值,这将特别方便。
该摘录来自Spring Boot 参考指南。基本上
Filter,在应用程序上下文中检测到的所有内容都将注册到默认过滤器链中,并映射到
DispatcherServlet或
/。
在您的情况下,由于过滤器被标记为
@Component它将是Bean,因此Spring
Boot会检测到is并将其注册到嵌入式容器中。但是,您不希望仅将其包含在Spring Security过滤器链中。
为此,您有2个选项。
- 删除
@Component
和@Autowired
并构造您自己的实例,不要使其成为bean。 - 添加一个额外的[
FilterRegistrationBean
]并将enabled
属性设置为false
,这将阻止Spring Boot向嵌入式容器注册它。
Herer是选项2的解决方案:
@Beanpublic FilterRegistrationBean preAuthTenantContextInitializerFilterRegistration(PreAuthTenantContextInitializerFilter filter) { FilterRegistrationBean registration = new FilterRegistrationBean(filter); registration.setEnabled(false); return registration;}有了这个添加的bean,Spring Boot将不会在嵌入式容器中注册过滤器,因此,它将仅作为Spring Security过滤器链的一部分被调用。



