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