Open3
(Spring)インターセプター(interceptor)を使って割り込み処理を実装する
インターセプターとは?
HandlerInterceptor (Spring Framework API) - Javadoc
アプリケーションは、(略)インターセプターをいくつでも登録して、(略)、共通の前処理動作を追加できます。
SpringにおけるInterceptorクラスは、例えば「コントローラが呼ばれる前に何か共通の処理を行うクラスを実装したい」といった際に使うクラスです。
【Spring Boot】Interceptorによる共通処理
Interceptor は、コントローラーの実行前後で共通の処理を追加するための仕組みです。 主にログ出力や認可処理などの用途で使用されます。
ざっくりまとめ
共通の前後処理を実装できる機能。
コントローラの手前で共通する処理を行いたいときに使えるクラス。
ユースケースとして、認可処理やログ出力がある。
実装の流れ
大きな流れは2つ。
-
Interceptor
クラスを作成する - 作成したインターセプターを
Configuration
クラスに登録する
詳細な流れ
-
HandlerInterceptor
インターフェースを実装してinterceptor
用のクラスを作成する。 -
HandlerInterceptor
が持つ3つのメソッドを処理内容に合わせてオーバーライドする- 事前処理:
preHandle
- 事後処理:
postHandle
- レスポンス完了後の処理:
afterCompletion
- 事前処理:
- 実装した
Interceptor
クラスをConfiguration
クラスで登録する。- (
Configuration
クラスは、WebMvcConfigure
インターフェースを実装したクラス)
- (
-
Interceptor
をDIコンテナに登録 -
addInterceptors
メソッドをオーバーライドする- (
addInterceptors
メソッドは名前の通り、インターセプターを登録するメソッド)
- (
-
addInterceptors
メソッドの引数registry
にinterceptor
を追加する。
追加処理
必要に応じて、パスパターンを追加して処理の対象とするパスを指定する。
参考
【Spring Boot】Interceptorによる共通処理
WebMvcConfigurer (Spring Framework API) - Javadoc
認証処理の本体はどこに書くのか?
-> Interceptorに書く
エラーハンドリングはどこで行うのか?
-
コントローラアドバイスを使う場合の例
インターセプターでfalse
をreturn
する代わりに、例外を投げる。
投げられた例外をコントローラアドバイスでキャッチする。 -
エラーコントローラを使う場合の例
SpringでInterceptorを使う - Qiita
インターセプターからsendRedirect
でエラーコントローラに処理を渡す