きり丸の技術日記

技術検証したり、資格等をここに残していきます。

SpringのInterceptorでGETメソッド以外を拒否するようにコードで表現する

※ 特に見どころはありません。


業務都合にて、「アプリケーションをメンテナンスモードに切り替えても、参照系APIだけは参照できるようにしたい。更新系APIは拒否したい。」との要望が出てきました。

そもそも、「そんなこと可能?」ということを素振りしただけの記事です。

環境

  • Java
    • 17
  • SpringBoot
    • 2.6.4

前提

既にInterceptorは実装されている前提で進めます。Interceptorの実装、テストに関しては当記事を参照してください。

実装

AsyncHandlerInterceptor#preHandleメソッドの第1引数のHttpServletRequestにリクエストに関する情報が設定されています。

getMethodにて、HttpメソッドがGETメソッドであることを判定すれば、完了です。

public class MaintenanceInterceptor implements AsyncHandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    if (HttpMethod.GET.name().equals(request.getMethod())) {
      return true;
    }
    
    return false;
  }

他にもpathInfo, requestURI等に実行対象のURLが載っていたりするので、エンドポイントごとに規制する、規制しないというのも可能そうです。

特に、死活監視用のエンドポイントである/actuator/healthだけはInterceptorしない等々もできると思います。(spring-actuatorでできるかは未検証)

ソースコード

終わりに

過去のブログ記事 + αなので、大した内容ではありませんが、こうして疑問に思ったことを素振りして、期待通りにできたというメモを残しておきます。

類似記事