首頁 >Java >java教程 >為什麼我的 Spring 過濾器在定義為 Bean 時會被呼叫兩次?

為什麼我的 Spring 過濾器在定義為 Bean 時會被呼叫兩次?

DDD
DDD原創
2024-12-05 17:45:13714瀏覽

Why is My Spring Filter Invoked Twice When Defined as a Bean?

為什麼過濾器在註冊為 Spring Bean 時會被呼叫兩次?

為了利用 Spring 依賴注入,通常將過濾器註冊為 Spring Boot 中的 Bean,通常使用@Autowire。但是,這可能會導致過濾器被呼叫兩次。

原因

如您所注意到的,Spring Boot 會自動向 servlet 容器註冊標記為 beans 的過濾器。這意味著透過 @Bean 註冊的過濾器會被 Spring Security 和容器呼叫。

解決方案

解決此問題有兩種主要方法:

1.防止自動註冊:

如果您不需要將依賴項自動組裝到過濾器中,只需避免將其公開為bean 即可。相反,將其定義為常規Java 類,並僅使用Spring Security 手動註冊:

http.addFilterBefore(new YourFilter(), BasicAuthenticationFilter.class);

2.停用Spring Boot 註冊:

要手動註冊您的過濾器並且仍然使用依賴注入,您可以利用FilterRegistrationBean:

@Bean
public FilterRegistrationBean registration(YourFilter filter) {
    FilterRegistrationBean<YourFilter> registration = new FilterRegistrationBean<>(filter);
    registration.setEnabled(false); // Disable Spring Boot registration
    return registration;
}

此配置會阻止 Spring Boot 註冊您的過濾器,但允許您可以為 Spring 依賴注入指定過濾器 bean。

以上是為什麼我的 Spring 過濾器在定義為 Bean 時會被呼叫兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn