SpringBoot2.6 インターセプター(HandlerInterceptor)を使用する
環境
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");
}
}
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)
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)
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″:"大阪"}