インターフェース HandlerInterceptor

すべての既知のサブインターフェース:
AsyncHandlerInterceptor
すべての既知の実装クラス:
ConversionServiceExposingInterceptorLocaleChangeInterceptorMappedInterceptorResourceUrlProviderExposingInterceptorThemeChangeInterceptorUserRoleAuthorizationInterceptorWebContentInterceptorWebRequestHandlerInterceptorAdapter

public interface HandlerInterceptor
カスタマイズされたハンドラー実行チェーンを可能にするワークフローインターフェース。アプリケーションは、ハンドラーの特定のグループに既存またはカスタムのインターセプターをいくつでも登録して、各ハンドラーの実装を変更する必要なく、共通の前処理動作を追加できます。

HandlerInterceptor は、適切な HandlerAdapter がハンドラー自体の実行をトリガーする前に呼び出されます。このメカニズムは、前処理などの広いフィールドで使用できます。認可チェック、またはロケールやテーマの変更などの一般的なハンドラーの動作。その主な目的は、繰り返しハンドラーコードを除外できるようにすることです。

非同期処理のシナリオでは、メインスレッドが postHandle および afterCompletion コールバックをレンダリングまたは呼び出さずに終了する間、ハンドラーは別のスレッドで実行される場合があります。ハンドラーの同時実行が完了すると、モデルのレンダリングを続行するためにリクエストがディスパッチされ、この契約のすべてのメソッドが再度呼び出されます。その他のオプションと詳細については、org.springframework.web.servlet.AsyncHandlerInterceptor を参照してください

通常、インターセプターチェーンは HandlerMapping Bean ごとに定義され、その粒度を共有します。特定のインターセプターチェーンをハンドラーのグループに適用できるようにするには、1 つの HandlerMapping Bean を介して目的のハンドラーをマップする必要があります。インターセプター自体は、アプリケーションコンテキストで Bean として定義され、その「インターセプター」プロパティを介してマッピング Bean 定義によって参照されます(XML では <ref> の <list>)。

HandlerInterceptor は基本的にサーブレットフィルターに似ていますが、後者とは異なり、ハンドラー自体の実行を禁止するオプションを備えたカスタム前処理とカスタム後処理のみを許可します。フィルターはより強力です。たとえば、チェーンに渡されるリクエストオブジェクトとレスポンスオブジェクトを交換できます。フィルターは、アプリケーションコンテキストの HandlerInterceptor、web.xml で構成されます。

基本的なガイドラインとして、きめの細かいハンドラー関連の前処理タスクは、HandlerInterceptor 実装の候補です。特に、除外された共通ハンドラーコードと認可チェックです。一方、フィルターは、マルチパートフォームや GZIP 圧縮など、リクエストコンテンツやビューコンテンツの処理に適しています。これは通常、フィルターを特定のコンテンツ型(イメージなど)またはすべてのリクエストにマップする必要がある場合を示します。

導入:
20.06.2003
作成者:
Juergen Hoeller
関連事項:
  • メソッドの詳細

    • 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 - エラーの場合