注册为Spring bean时过滤器调用两次
我想@Autowire搭配使用Filter。所以我在SecurityConfig下面定义我的过滤器:
@Override protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(getA(), BasicAuthenticationFilter.class);
http.csrf().disable();
}
@Bean
public A getA(){
return new A();
}
该过滤器A扩展了Spring的GenericFilterBean。
当我调用控制器时,我得到的输出低于输出,它显示了过滤器命中两次。
filter A beforefilter A before
mycontroller invoke
filter A after
filter A after
我的观察是,这种额外的调用是用Spring容器调用的,因为如果未将filter注册为bean,则它只会被命中一次。原因是什么,我该如何解决?
回答:
如您所见,Spring Boot将自动Filter向servlet容器注册任何一个Bean 。一种选择是不将您的过滤器公开为bean,而仅向Spring
Security注册。
如果您希望能够将依赖项自动关联到Filter中,则它必须是一个bean。这意味着您需要告诉Spring
Boot不要将其注册为过滤器。如文档中所述,您可以使用FilterRegistrationBean:
@Beanpublic FilterRegistrationBean registration(MyFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
以上是 注册为Spring bean时过滤器调用两次 的全部内容, 来源链接: utcz.com/qa/411122.html


