使用 @Autowire 在 Spring Security 中重复调用过滤器
当尝试在 Spring Security 中通过 @Autowire 将依赖项注入过滤器时,这可能会导致过滤器被调用两次的问题。发生这种情况是因为 Spring Boot 自动向 servlet 容器注册任何过滤器 bean。
为了防止这种双重调用,有两个选项:
1。避免将 Filter 注册为 Bean
这可以通过不将过滤器公开为 bean 并仅将其注册到 Spring Security 来实现。这可以确保 Spring Boot 不会自动向 servlet 容器注册过滤器。
2.使用 FilterRegistrationBean
如果将依赖项自动装配到过滤器中是必要的,那么过滤器必须是一个 bean。但是,需要明确指示 Spring Boot 不要将过滤器注册为 Filter。这可以使用 FilterRegistrationBean 来完成,如下所示:
@Bean public FilterRegistrationBean registration(MyFilter filter) { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); return registration; }
这种方法可以防止 Spring Boot 将过滤器注册到 servlet 容器,同时仍然允许 Spring Security 自动装配过滤器。
以上是为什么我的 Spring Security 过滤器在使用 @Autowired 时调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!