SpringBoot2.6 インターセプター(HandlerInterceptor)を使用する

2022年2月9日

環境
Windows10 64bit
Spring Boot 2.6.3
Spring Tool Suite 4
JavaSE 11
Thymeleaf 3

操作方法
1.インターセプターの定義(RunInterceptor.java)

package com.example.demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class RunInterceptor implements HandlerInterceptor {

      // メソッドの実行前に実行される
      @Override
      public boolean preHandle(HttpServletRequest request, 
                  HttpServletResponse response, Object handler)
                  throws Exception {

            System.out.println("preHandle method");
            return true;
      }

      // メソッドの実行後に実行される
      @Override
      public void postHandle(HttpServletRequest request, 
                  HttpServletResponse response, Object handler,
                  ModelAndView modelAndView) throws Exception {

            System.out.println("postHandle method");
      }

      // リクエスト処理の完了後に実行される
      @Override
      public void afterCompletion(HttpServletRequest request, 
                  HttpServletResponse response, Object handler, Exception ex)
                  throws Exception {
            System.out.println("afterCompletion method");
      }
}

2.コントローラ側クラスの定義(InterController.java)

package com.example.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//jsonを返す
@RestController
public class InterController {

      @GetMapping("/cft3")
      public Map<Integer, String> funA() {

            Map<Integer, String> mp = new HashMap<>();
            mp.put(101, "東京");
            mp.put(202, "大阪");
            System.out.println("before message 12345");
            return mp;
      }
}

3.インターセプターの設定ファイル(ConfigWebMvc.java)

package com.example.demo;

import org.springframework.context.annotation.Bean;
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 ConfigWebMvc implements WebMvcConfigurer {
      
      @Bean
      public RunInterceptor runInterceptor() {
            return new RunInterceptor();
      }
      
      //インターセプターを追加
      public  void addInterceptors(InterceptorRegistry registry) {
            // 「/cft3」が対象になる
            registry.addInterceptor(runInterceptor()).addPathPatterns("/cft3");
            
      }
}

4.実行結果
コンソールに以下の順番で表示されます。
preHandle method
before message 12345
postHandle method
afterCompletion method
画面に以下のメッセージで表示されます。
{“101″:"東京","202″:"大阪"}

Spring Boot

Posted by arkgame