BBH
-Biz Branding Hub-
投稿日 : 
2020/04/02
更新日 : 
2020/04/02

【SpringBootMVC】コントローラの前に処理をインターセプトするサンプル

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()が実施されます。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend