SpringBootにおけるアクションメソッド前後の処理
SpringBootでアクションメソッド前後の処理を行う場合にはインターセプターを利用する。具体的には、以下の手順で実装が可能である。
- HandlerInterceptorを実装したクラスを作成する。このクラスでアクションメソッド前後の処理を実装する。
- 作成したクラスをbeanに登録する。
- WebMvcConfigurerAdapterのaddInterceptorsメソッドで作成したクラスをインターセプターとして登録する。
具体的な内容
たとえばアクションメソッド前後でログを出力する処理を実装してみる。
インターセプターの作成
LoggingIntercepter
クラスを実装し、ログの出力処理を定義する。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * beaglesoft LLC. All rights reserved. * ロギングを行うインターセプター */ public class LoggingIntercepter implements HandlerInterceptor { private static final Logger logger = LoggerFactory.getLogger(LoggingIntercepter.class); @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { logger.debug("LoggingIntercepter.preHandle"); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { logger.debug("LoggingIntercepter.postHandle"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { logger.debug("LoggingIntercepter.afterCompletion"); } }
LoggingIntercepterをbeanに登録する
作成したLoggingIntercepter
をbeanに登録します。今回はAppConfig.java
に設定を登録することとします。
@EnableTransactionManagement @Configuration public class AppConfig{ ... @Bean HandlerInterceptor loggingIntercepter(){ return new LoggingIntercepter(); } .... }
WebMvcConfigurerAdapterのaddInterceptorsにLoggingIntercepterを登録する
最後にWebMvcConfigurerAdapter
クラスのaddInterceptors
をオーバーライドしてLoggingIntercepter
をインターセプターとして登録します。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Autowired HandlerInterceptor loggingIntercepter; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loggingIntercepter); } }
実行してログが出力されることを確認する
上記の設定を行ったら実際に実行してログが出力されることを確認します。BreakPointで停止して内容を確認できます。
参考にしたサイト
java - spring boot adding http request interceptors - Stack Overflow