首页 >Java >java教程 >为什么我的 Spring Security 过滤器被调用两次?

为什么我的 Spring Security 过滤器被调用两次?

Patricia Arquette
Patricia Arquette原创
2024-12-25 01:43:13421浏览

Why Are My Spring Security Filters Invoked Twice?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn