web-dev-qa-db-ja.com

GenericFilterBeanとOncePerRequestFilterのどちらを使用するのですか?

私はすでにこのトピックに関連するいくつかの質問を見つけましたが、それらのどれもがこのトピックに光を当てていないことに気づきました。

どうやらOncePerRequestFilterは、リクエストがフィルターチェーンで一度だけフィルターを通過することを保証しますが、その逆がいつ発生するかは正確にはわかりません。

どちらか一方を使用するいくつかのシナリオを見るとよいでしょう。また、フィルターがフィルターチェーンに数回適用されるタイミングと方法の例も示します。

たとえば.

  1. JWTフィルターの場合、どの実装を使用する必要がありますか。その理由は何ですか。
  2. CORSフィルターの場合、どの実装を使用する必要がありますか。その理由は何ですか。等.

OncePerRequestFilter状態のjavadoc

サーブレット3.0以降、別個のスレッドで発生する_javax.servlet.DispatcherType REQUEST_または_javax.servlet.DispatcherType ASYNC_ディスパッチの一部としてフィルターを呼び出すことができます。フィルターは、非同期ディスパッチに含める必要があるかどうかにかかわらず、_web.xml_で構成できます。ただし、場合によっては、サーブレットコンテナは異なるデフォルト設定を想定しています。したがって、サブクラスは、メソッドshouldNotFilterAsyncDispatch()をオーバーライドして、スレッドの初期化を提供するために、両方のタイプのディスパッチ中に実際に呼び出す必要がある場合onceを静的に宣言できます。 、ロギング、セキュリティなど。このメカニズムは、_web.xml_のフィルターをディスパッチャタイプで構成する必要性を補完し、置き換えるものではありません。

つまり、環境に関係なく同じように機能するようにするために、Springに実装された追加の「安全」機能です。それを拡張するクラスを見ると、たくさんあることがわかります。 CorsFilterを含みます。 それを拡張しないSpringフィルタがあるかどうかはわかりませんが、おそらく拡張されません。

2
Kayaman