インターフェース HandlerInterceptor
- すべての既知のサブインターフェース:
AsyncHandlerInterceptor
- すべての既知の実装クラス:
ConversionServiceExposingInterceptor
、LocaleChangeInterceptor
、MappedInterceptor
、ResourceUrlProviderExposingInterceptor
、ThemeChangeInterceptor
、UserRoleAuthorizationInterceptor
、WebContentInterceptor
、WebRequestHandlerInterceptorAdapter
適切な HandlerAdapter がハンドラー自体の実行をトリガーする前に、HandlerInterceptor が呼び出されます。このメカニズムは、前処理の側面の広いフィールド、またはロケールやテーマの変更などの一般的なハンドラーの動作に使用できます。その主な目的は、反復的なハンドラーコードを分離できるようにすることです。
非同期処理のシナリオでは、メインスレッドが postHandle
および afterCompletion
コールバックをレンダリングまたは呼び出さずに終了する間、ハンドラーは別のスレッドで実行される場合があります。ハンドラーの同時実行が完了すると、モデルのレンダリングを続行するためにリクエストがディスパッチされ、この契約のすべてのメソッドが再度呼び出されます。その他のオプションと詳細については、org.springframework.web.servlet.AsyncHandlerInterceptor
を参照してください
通常、インターセプターチェーンは HandlerMapping Bean ごとに定義され、その粒度を共有します。特定のインターセプターチェーンをハンドラーのグループに適用できるようにするには、1 つの HandlerMapping Bean を介して目的のハンドラーをマップする必要があります。インターセプター自体は、アプリケーションコンテキストで Bean として定義され、その「インターセプター」プロパティを介してマッピング Bean 定義によって参照されます(XML では <ref> の <list>)。
HandlerInterceptor は基本的にサーブレットフィルターに似ていますが、後者とは異なり、ハンドラー自体の実行を禁止するオプションを備えたカスタム前処理とカスタム後処理のみを許可します。フィルターはより強力です。たとえば、チェーンに渡されるリクエストオブジェクトとレスポンスオブジェクトを交換できます。フィルターは、アプリケーションコンテキストの HandlerInterceptor、web.xml で構成されます。
基本的なガイドラインとして、きめ細かいハンドラー関連の前処理タスク、特に分離した共通ハンドラーコードと認証チェックは、HandlerInterceptor 実装の候補です。一方、フィルターは、マルチパートフォームや GZIP 圧縮などのリクエストコンテンツとビューコンテンツの処理に適しています。これは通常、フィルターを特定のコンテンツ型 (イメージなど) またはすべてのリクエストにマップする必要がある場合に示されます。
注意 : インターセプターは、アノテーション付きコントローラーパスのマッチングとの不一致の可能性があるため、セキュリティレイヤーとしては最適ではありません。一般的には、Spring Security を使用するか、サーブレットフィルターチェーンと統合された同様のアプローチをできるだけ早く適用することをお勧めします。
方法の概要
修飾子と型メソッド説明default void
afterCompletion
(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler, ExceptionSE ex) リクエスト処理の完了後、つまりビューのレンダリング後のコールバック。default void
postHandle
(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler, ModelAndView modelAndView) ハンドラーの実行が成功した後のインターセプトポイント。default boolean
preHandle
(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler) ハンドラーの実行前のインターセプトポイント。
メソッドの詳細
preHandle
default boolean preHandle(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler) throws ExceptionSE ハンドラーの実行前のインターセプトポイント。HandlerMapping が適切なハンドラーオブジェクトを決定した後、HandlerAdapter がハンドラーを呼び出す前に呼び出されます。DispatcherServlet は、任意の数のインターセプターで構成される実行チェーンでハンドラーを処理し、ハンドラー自体を最後に処理します。このメソッドを使用すると、各インターセプターはチェーンの実行を中止することを決定でき、通常は HTTP エラーを送信するか、カスタムレスポンスを作成します。
注意 : 非同期リクエスト処理には特別な考慮事項が適用されます。詳細については、
AsyncHandlerInterceptor
を参照してください。デフォルトの実装は
true
を返します。- パラメーター:
request
- 現在の HTTP リクエストresponse
- 現在の HTTP レスポンスhandler
- 型および / またはインスタンス評価のために、実行するために選択されたハンドラー- 戻り値:
- 実行チェーンが次のインターセプターまたはハンドラー自体を続行する必要がある場合は、
true
。そうでない場合、DispatcherServlet は、このインターセプターがすでにレスポンス自体を処理していると想定します。 - 例外:
ExceptionSE
- エラーの場合
postHandle
default void postHandle(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler, @Nullable ModelAndView modelAndView) throws ExceptionSE ハンドラーの実行が成功した後のインターセプトポイント。HandlerAdapter が実際にハンドラーを呼び出した後、DispatcherServlet がビューをレンダリングする前に呼び出されます。指定された ModelAndView を介して、追加のモデルオブジェクトをビューに公開できます。DispatcherServlet は、任意の数のインターセプターで構成される実行チェーンのハンドラーを処理します。ハンドラー自体は最後にあります。このメソッドを使用すると、各インターセプターは実行を後処理でき、実行チェーンの逆順で適用されます。
注意 : 非同期リクエスト処理には特別な考慮事項が適用されます。詳細については、
AsyncHandlerInterceptor
を参照してください。デフォルトの実装は空です。
- パラメーター:
request
- 現在の HTTP リクエストresponse
- 現在の HTTP レスポンスhandler
- 型やインスタンスの検査のために、非同期実行を開始したハンドラー(またはHandlerMethod
)modelAndView
- ハンドラーが返したModelAndView
(null
にすることもできます)- 例外:
ExceptionSE
- エラーの場合
afterCompletion
default void afterCompletion(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler, @Nullable ExceptionSE ex) throws ExceptionSE リクエスト処理の完了後、つまりビューのレンダリング後のコールバック。ハンドラー実行の結果で呼び出されるため、適切なリソースのクリーンアップが可能になります。メモ: このインターセプターの
preHandle
メソッドが正常に完了し、true
を返した場合にのみ呼び出されます!postHandle
メソッドと同様に、このメソッドはチェーンの各インターセプターで逆の順序で呼び出されるため、最初のインターセプターが最後に呼び出されます。注意 : 非同期リクエスト処理には特別な考慮事項が適用されます。詳細については、
AsyncHandlerInterceptor
を参照してください。デフォルトの実装は空です。
- パラメーター:
request
- 現在の HTTP リクエストresponse
- 現在の HTTP レスポンスhandler
- 型やインスタンスの検査のために、非同期実行を開始したハンドラー(またはHandlerMethod
)ex
- ハンドラーの実行時にスローされる例外(ある場合)。これには、例外リゾルバーを介して処理された例外は含まれません- 例外:
ExceptionSE
- エラーの場合