インターセプト

すべての HandlerMapping 実装は、リクエスト間で機能を適用する場合に便利なハンドラーインターセプションをサポートしています。HandlerInterceptor は以下を実装できます。

  • preHandle(..) — 実際のハンドラーが実行される前にブール値を返すコールバック。メソッドが true を返す場合、実行は続行されます。false を返す場合、残りの実行 チェーン はバイパスされ、ハンドラーは呼び出されません。

  • postHandle(..) — ハンドラーが実行された後のコールバック。

  • afterCompletion(..) — リクエストが完了した後のコールバック。

@ResponseBody および ResponseEntity コントローラーメソッドの場合、レスポンスは postHandle が呼び出される前に HandlerAdapter 内で書き込まれ、コミットされます。つまり、追加のヘッダーを追加するなど、レスポンスを変更するには遅すぎます。ResponseBodyAdvice を実装してコントローラーのアドバイス Bean として宣言するか、RequestMappingHandlerAdapter で直接構成することができます。

インターセプターを構成する方法の例については、MVC 構成に関するセクションのインターセプターを参照してください。また、個々の HandlerMapping 実装で setter を使用して直接登録することもできます。

インターセプターは、アノテーション付きコントローラーパスのマッチングとの不一致の可能性があるため、セキュリティレイヤーとしては最適ではありません。一般的には、Spring Security を使用するか、サーブレットフィルターチェーン と統合された同様のアプローチをできるだけ早く適用することをお勧めします。