Open3

(Spring)インターセプター(interceptor)を使って割り込み処理を実装する

ふじしろふじしろ

インターセプターとは?

HandlerInterceptor (Spring Framework API) - Javadoc

アプリケーションは、(略)インターセプターをいくつでも登録して、(略)、共通の前処理動作を追加できます。

SpringでInterceptorを使う - Qiita

SpringにおけるInterceptorクラスは、例えば「コントローラが呼ばれる前に何か共通の処理を行うクラスを実装したい」といった際に使うクラスです。

【Spring Boot】Interceptorによる共通処理

Interceptor は、コントローラーの実行前後で共通の処理を追加するための仕組みです。 主にログ出力や認可処理などの用途で使用されます。

ざっくりまとめ

共通の前後処理を実装できる機能。
コントローラの手前で共通する処理を行いたいときに使えるクラス。
ユースケースとして、認可処理やログ出力がある。

ふじしろふじしろ

実装の流れ

大きな流れは2つ。

  • Interceptorクラスを作成する
  • 作成したインターセプターをConfigurationクラスに登録する

詳細な流れ

  1. HandlerInterceptorインターフェースを実装してinterceptor用のクラスを作成する。
  2. HandlerInterceptorが持つ3つのメソッドを処理内容に合わせてオーバーライドする
    1. 事前処理:preHandle
    2. 事後処理:postHandle
    3. レスポンス完了後の処理:afterCompletion
  3. 実装したInterceptorクラスをConfigurationクラスで登録する。
  4. InterceptorをDIコンテナに登録
  5. addInterceptorsメソッドをオーバーライドする
    • addInterceptorsメソッドは名前の通り、インターセプターを登録するメソッド)
  6. addInterceptorsメソッドの引数registryinterceptorを追加する。

追加処理

必要に応じて、パスパターンを追加して処理の対象とするパスを指定する。

参考

【Spring Boot】Interceptorによる共通処理
WebMvcConfigurer (Spring Framework API) - Javadoc

ふじしろふじしろ

認証処理の本体はどこに書くのか?
-> Interceptorに書く

エラーハンドリングはどこで行うのか?

  • コントローラアドバイスを使う場合の例
    インターセプターでfalsereturnする代わりに、例外を投げる。
    投げられた例外をコントローラアドバイスでキャッチする。

  • エラーコントローラを使う場合の例
    SpringでInterceptorを使う - Qiita
    インターセプターからsendRedirectでエラーコントローラに処理を渡す