ホームページ > Java > &#&チュートリアル > Spring フィルターが 2 回呼び出されるのはなぜですか? どうすれば修正できますか?

Spring フィルターが 2 回呼び出されるのはなぜですか? どうすれば修正できますか?

Mary-Kate Olsen
リリース: 2024-12-09 03:00:15
オリジナル
959 人が閲覧しました

Why is My Spring Filter Being Invoked Twice, and How Can I Fix It?

Spring Bean アノテーションを使用してフィルターが 2 回登録される

フィルターを Spring Bean として登録する場合、複数の呼び出しが行われる可能性を考慮することが重要です。特定のシナリオでは、次の問題に見られるように、フィルターが 2 回トリガーされることがあります:

問題:

ユーザーが Spring の GenericFilterBean を拡張するフィルター A を定義します。 。このフィルターが Spring Security 構成に Bean として登録されると、追加の呼び出しが観察され、次の出力が得られます:

filter A before
filter A before
mycontroller invoke
filter A after
filter A after
ログイン後にコピー

Query:

Whyフィルターは 2 回呼び出されていますか?この問題はどのようにして起こりますか?解決しましたか?

回答:

Spring Boot が Filter タイプの Bean をサーブレット コンテナに自動的に登録するため、追加の呼び出しが発生します。これを防ぐには、2 つのオプションがあります。

オプション 1: Spring Security のみにフィルターを登録する

フィルターを Bean として公開することを避け、Spring Security のみに登録する、次のように:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(new A(), BasicAuthenticationFilter.class);
    http.csrf().disable();
}
ログイン後にコピー

オプション 2: FilterRegistrationBean を使用するアノテーション

フィルタへの依存関係の自動接続が必要な場合は、Bean として登録できますが、FilterRegistrationBean:

@Bean
public FilterRegistrationBean registration(MyFilter filter) {
    FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>(filter);
    registration.setEnabled(false);
    return registration;
}
ログイン後にコピー
を使用してサーブレット コンテナへの自動登録を無効にできます。

以上がSpring フィルターが 2 回呼び出されるのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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