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

2022年2月9日

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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");
}
}
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"); } }
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)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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");
}
}
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"); } }
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