インターセプト
すべての HandlerMapping
実装は、リクエスト間で機能を適用する場合に便利なハンドラーインターセプションをサポートしています。HandlerInterceptor
は以下を実装できます。
preHandle(..)
— 実際のハンドラーが実行される前にブール値を返すコールバック。メソッドがtrue
を返す場合、実行は続行されます。false
を返す場合、残りの実行 チェーンはバイパスされ、ハンドラーは呼び出されません。postHandle(..)
— ハンドラーが実行された後のコールバック。afterCompletion(..)
— リクエストが完了した後のコールバック。
@ResponseBody および ResponseEntity コントローラーメソッドの場合、レスポンスは postHandle が呼び出される前に HandlerAdapter 内で書き込まれ、コミットされます。つまり、追加のヘッダーを追加するなど、レスポンスを変更するには遅すぎます。ResponseBodyAdvice を実装してコントローラーのアドバイス Bean として宣言するか、RequestMappingHandlerAdapter で直接構成することができます。 |
インターセプターを構成する方法の例については、MVC 構成に関するセクションのインターセプターを参照してください。また、個々の HandlerMapping
実装で setter を使用して直接登録することもできます。
インターセプターは、アノテーション付きコントローラーパスのマッチングとの不一致の可能性があるため、セキュリティレイヤーとしては最適ではありません。一般的には、Spring Security を使用するか、サーブレットフィルターチェーンと統合された同様のアプローチをできるだけ早く適用することをお勧めします。 |