以下の内容はhttps://nainaistar.hatenablog.com/entry/2022/09/12/120000より取得しました。


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でできるかは未検証)

ソースコード

終わりに

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

類似記事




以上の内容はhttps://nainaistar.hatenablog.com/entry/2022/09/12/120000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14