※ 特に見どころはありません。
業務都合にて、「アプリケーションをメンテナンスモードに切り替えても、参照系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でできるかは未検証)
ソースコード
終わりに
過去のブログ記事 + αなので、大した内容ではありませんが、こうして疑問に思ったことを素振りして、期待通りにできたというメモを残しておきます。