Spring の依存関係注入を利用するには、フィルターを Spring Boot に Bean として登録するのが一般的です。 @Autowireを使用します。ただし、これによりフィルタが 2 回呼び出される可能性があります。
お気づきのとおり、Spring Boot は Bean としてマークされたフィルタをサーブレット コンテナに自動的に登録します。これは、@Bean 経由で登録されたフィルターが Spring Security とコンテナーの両方によって呼び出されることを意味します。
この問題を解決するには、主に 2 つのアプローチがあります:
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 を指定します。
以上がBean として定義すると Spring フィルターが 2 回呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。