Spring Bootで共通処理を行おうと思うと、HandlerInterceptorAdapterを使うように書かれたサイトがヒットします。
しかし、HandlerInterceptorAdapterは現在非推奨となっています(2020年10月)。
そのため、代わりにHandlerInterceptor.javaを使うようにしましょう。
今回は、非推奨のクラスやメソッドを使うリスクと、Adapterとの違いをお伝えします。
非推奨のクラスやメソッドを使うリスク
非推奨のクラスやメソッドを使うと、1本の打消し線が引かれ、警告が出ます。
警告状態でもそのまま使い続けることはできますし、@deprecatedアノテーションを付けて非推奨警告を出さないようにすることさえできます。
しかし、基本的に非推奨のクラスやメソッドは使わないようにしましょう。
それは、以下のような理由で非推奨になることがほとんどだからです。
- 動作が安全ではない
- 将来廃止される可能性がある
- 上位互換のクラスやメソッドが用意されている
HandlerInterceptorの使い方
それでは、HandlerInterceptorAdapterの代わりに使うHandlerInterceptorの使い方を見ていきます。まずはコードを見ます。
@Component public class HogeHogeHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object Handler) throws Exception { //コントローラー前に行いたい共通処理を書く。 reture true; //true: コントローラへ。false: コントローラーへ行かせない。 } @Override public void postHandle (HttpServletRequest request, HttpServletResponse response, Object Handler) throws Exception { //コントローラー後に行いたい共通処理を書く。 } @Override public void AfterCompletion (HttpServletRequest request, HttpServletResponse response, Object Handler) throws Exception { //リクエストの後に行いたい共通処理を書く。 } }
HandlerInterceptorAdapterとの違い
非推奨となったAdapterとの違いですが、動作に違いはありません。
1つ大きく違うのは、HandlerInterceptorAdapterは継承(extends)だったのに対し、HandlerInterceptorは実装(implements)である点です。
Configurationクラスも必要
HandlerInterceptorの実装クラスを使用するためには、Configurationクラスを定義する必要があります。以下のようなクラスを作成します。
@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Autowired private HogeHogeHandlerInterceptor hogeHogeHandlerInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(hogeHogeHandlerInterceptor) .addPathPatterns("/") .addPathPatterns("/start") .addPathPatterns("/test"); //上記のパスへのリクエストのときだけ、hogehogeHandlerInterceptorが実行される。 //.excludePathPatterns("/"); // 除外もある。 } }
まとめ
HandlerIntereptorAdapterの代わりのHandlerInerceptorの使い方をお伝えしました。
非推奨のメソッドはなるべく使わないように意識したいところです。
同時にConfigurationファイルを作成することを忘れないでくださいね。
最後までお読みいただきありがとうございました。