ホームページ > Java > &#&チュートリアル > Bean として定義すると Spring フィルターが 2 回呼び出されるのはなぜですか?

Bean として定義すると Spring フィルターが 2 回呼び出されるのはなぜですか?

DDD
リリース: 2024-12-05 17:45:13
オリジナル
717 人が閲覧しました

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

Spring Bean として登録するとフィルターが 2 回呼び出されるのはなぜですか?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート