Spring Bean 过滤器注册中的双重过滤器调用
使用 Spring Security 时,将过滤器注册为 Bean 可能会导致无意的双重调用。当 Spring 的自动装配机制注册过滤器两次时,就会发生这种情况:一次是通过传统的 bean 发现过程,另一次是由于过滤器对 Spring 的 GenericFilterBean 进行子类化。
问题原因:
罪魁祸首是 Spring Boot 将过滤器自动注册为 beans。这样做的目的是简化过滤器配置,但当过滤器显式定义并注册到 Spring Security 时,可能会导致冗余。
修复:
要解决此问题,您必须明确通知 Spring Boot 不要将您的过滤器注册为 bean。这可以使用 FilterRegistrationBean 来实现,根据 Spring 文档:
@Bean public FilterRegistrationBean<MyFilter> registration(MyFilter filter) { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); return registration; }
通过 setEnabled(false) 禁用注册,可以有效防止 Spring Boot 自动注册过滤器。但是,由于您的过滤器在配置方法中注册,Spring Security 仍会识别并应用您的过滤器。
以上是为什么我的 Spring Security 过滤器被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!