SpringBootMVCにてコントローラの処理が行われる前に処理をインターセプトするサンプルを紹介します。
インターセプトとは?
インターセプトとは処理を割り込ませることです。
例えば、コントローラの処理をする前に一律で時刻をログに出力させたいとかいう場合に使用します。
インターセプトの設定
インターセプトクラスの実装
まず、処理を行うインターセプトクラスを実装します。
HandlerInterceptorAdapterを継承します。
HandlerInterceptorAdapterのpreHandle()をオーバーライドすることでコントローラ処理の前に処理をインターセプトできます。
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SampleInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("インターセプター実施"); return true; } }
今回はpreHandle()をオーバーライドしたので、処理前にインターセプトしていますが、postHandle()をオーバーライドすれば処理後にインターセプトさせることも可能です。
詳しくは、 org.springframework.web.servlet.handler.HandlerInterceptorAdapter クラスを見てみるといいでしょう。
インターセプトの設定
次に作成したインターセプトをwebConfigに登録します。
WebMvcConfigurerインターフェースを継承したConfigクラスを作成します。
addInterceptors()をオーバーライドし、インターセプトを登録します。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SampleInterceptor()); // インターセプターの設定
}
}
これで、コントローラーの処理が実施される前に、インターセプタークラスであるSampleInterceptorのpreHandle()が実施されます。