為了利用 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中文網其他相關文章!