public interface HandlerInterceptorHandlerInterceptor は、適切な HandlerAdapter がハンドラー自体の実行をトリガーする前に呼び出されます。このメカニズムは、前処理などの広いフィールドで使用できます。認可チェック、またはロケールやテーマの変更などの一般的なハンドラーの動作。その主な目的は、繰り返しハンドラーコードを除外できるようにすることです。
非同期処理のシナリオでは、メインスレッドが postHandle および afterCompletion コールバックをレンダリングまたは呼び出さずに終了する間、ハンドラーは別のスレッドで実行される場合があります。ハンドラーの同時実行が完了すると、モデルのレンダリングを続行するためにリクエストがディスパッチされ、この契約のすべてのメソッドが再度呼び出されます。その他のオプションと詳細については、org.springframework.web.servlet.AsyncHandlerInterceptor を参照してください
通常、インターセプターチェーンは HandlerMapping Bean ごとに定義され、その粒度を共有します。特定のインターセプターチェーンをハンドラーのグループに適用できるようにするには、1 つの HandlerMapping Bean を介して目的のハンドラーをマップする必要があります。インターセプター自体は、アプリケーションコンテキストで Bean として定義され、その「インターセプター」プロパティを介してマッピング Bean 定義によって参照されます(XML では <ref> の <list>)。
HandlerInterceptor は基本的にサーブレットフィルターに似ていますが、後者とは異なり、ハンドラー自体の実行を禁止するオプションを備えたカスタム前処理とカスタム後処理のみを許可します。フィルターはより強力です。たとえば、チェーンに渡されるリクエストオブジェクトとレスポンスオブジェクトを交換できます。フィルターは、アプリケーションコンテキストの HandlerInterceptor、web.xml で構成されます。
基本的なガイドラインとして、きめの細かいハンドラー関連の前処理タスクは、HandlerInterceptor 実装の候補です。特に、除外された共通ハンドラーコードと認可チェックです。一方、フィルターは、マルチパートフォームや GZIP 圧縮など、リクエストコンテンツやビューコンテンツの処理に適しています。これは通常、フィルターを特定のコンテンツ型(イメージなど)またはすべてのリクエストにマップする必要がある場合を示します。
HandlerExecutionChain.getInterceptors(), AbstractHandlerMapping.setInterceptors(java.lang.Object...), UserRoleAuthorizationInterceptor, LocaleChangeInterceptor, ThemeChangeInterceptor, FilterEE| 修飾子と型 | メソッドと説明 |
|---|---|
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) ハンドラーの実行前のインターセプトポイント。 |
default boolean preHandle(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler) throws ExceptionSE
DispatcherServlet は、任意の数のインターセプターで構成される実行チェーンでハンドラーを処理し、ハンドラー自体を最後に処理します。このメソッドを使用すると、各インターセプターはチェーンの実行を中止することを決定でき、通常は HTTP エラーを送信するか、カスタムレスポンスを作成します。
注意 : 非同期リクエスト処理には特別な考慮事項が適用されます。詳細については、AsyncHandlerInterceptor を参照してください。
デフォルトの実装は true を返します。
request - 現在の HTTP リクエスト response - 現在の HTTP レスポンス handler - 型および / またはインスタンス評価のために、実行するために選択されたハンドラー true。そうでない場合、DispatcherServlet は、このインターセプターがすでにレスポンス自体を処理していると想定します。ExceptionSE - エラーの場合 default void postHandle(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler, @Nullable ModelAndView modelAndView) throws ExceptionSE
DispatcherServlet は、任意の数のインターセプターで構成される実行チェーンのハンドラーを処理します。ハンドラー自体は最後にあります。このメソッドを使用すると、各インターセプターは実行を後処理でき、実行チェーンの逆順で適用されます。
注意 : 非同期リクエスト処理には特別な考慮事項が適用されます。詳細については、AsyncHandlerInterceptor を参照してください。
デフォルトの実装は空です。
request - 現在の HTTP リクエスト response - 現在の HTTP レスポンス handler - 型やインスタンスの検査のために、非同期実行を開始したハンドラー(または HandlerMethod)modelAndView - ハンドラーが返した ModelAndView (null にすることもできます)ExceptionSE - エラーの場合 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 - エラーの場合