[解決済み] Spring MVCにおけるInterceptorとFilterの相違点
質問
について少し混乱しています。
Filter
と
Interceptor
の目的で使用されます。
ドキュメントから理解したところでは
Interceptor
はリクエストの間に実行されます。一方
Filter
はビューをレンダリングする前に実行されますが、Controller がレスポンスをレンダリングした後に実行されます。
とはどこが違うのでしょうか?
postHandle()
をインターセプターで使用するのと
doFilter()
は、Filterの中にあるのですか?
どのようなケースで使うのがベストプラクティスなのでしょうか?
この画像では
Filter
と
Interceptor
s?
どのように解決するのですか?
から
HandlerIntercepter
's
ジャバドック
:
HandlerInterceptor
は基本的にサーブレットに似ていますFilter
しかし 後者とは対照的に、これはカスタムの前処理を可能にするだけで、その前処理は ハンドラ自体の実行を禁止するオプションと、ハンドラの実行を禁止するオプションがあります。 後処理を行います。フィルタはより強力で、例えば次のようなことが可能です。 リクエスト・オブジェクトとレスポンス・オブジェクトを交換する。 チェーンになります。フィルタの設定はweb.xml
, aHandlerInterceptor
をアプリケーションコンテキストに追加します。基本的なガイドラインとして、細かいハンドラ関連の前処理タスクは の候補になります。
HandlerInterceptor
の実装、特に ファクトアウトされた共通ハンドラコードと認可チェック。一方 一方Filter
は、リクエストの内容やビューに適しています。 マルチパートフォームやGZIP圧縮のようなコンテンツ処理。これは 一般的には、特定のコンテンツにフィルタを適用する必要がある場合です。 のタイプ (例: 画像)、またはすべてのリクエストに対応します。
そう言われると
では、その違いはどこにあるのでしょうか。
Interceptor#postHandle()
とFilter#doFilter()
?
postHandle
はハンドラメソッド呼び出しの後、ビューがレンダリングされる前に呼び出されます。そのため、ビューにさらにモデルオブジェクトを追加することができますが、その際
ではない
を変更します。
HttpServletResponse
はすでにコミットされているからです。
doFilter
よりもはるかに汎用的です。
postHandle
. リクエストやレスポンスを変更してチェーンに渡したり、リクエストの処理をブロックしたりすることもできます。
また
preHandle
と
postHandle
メソッドにアクセスできるようになります。
HandlerMethod
は、リクエストを処理した そのため、ハンドラ自身をベースにした前処理・後処理のロジックを追加することができます。例えば、何らかのアノテーションを持つハンドラメソッドに対して、ロジックを追加することができます。
どのようなユースケースで使用するのがベストプラクティスでしょうか?
ドキュメントにあるように、細かいハンドラ関連の前処理タスクは、以下のような候補になります。
HandlerInterceptor
特に、ファクタアウトされた共通ハンドラコードと認可チェックがそうです。一方
Filter
は、マルチパートフォームやGZIP圧縮のような、リクエストコンテンツやビューコンテンツの処理によく適しています。これは通常、フィルタを特定のコンテンツタイプ (例えば画像) やすべてのリクエストに対応させる必要があるときに現れます。
関連
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み] springの@Controllerアノテーションと@RestControllerアノテーションの違いについて
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
Spring Boot による HTTPS アクセスの設定
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
linux run jarfile Invalid or corrupt jarfile error.
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
IDEA パッケージステートメントの欠落
-
このラインで複数のマーカーを解決する方法
-
ローカルリソースのロードが許可されていない場合の解決策