前提・発生している現象
Springを利用したWebアプリケーションを作成しています。
すでに稼働して数年経つシステムですが、最近見慣れないログが出力されているのを見つけました。
このアプリでは各APIを実行前にpreHandle
メソッド内でユーザーがAPIの実行権限を持っているかチェックしており
権限が無い場合はどの処理を実行しようとしたのか、対象のメソッド名をログに出力するようにしています。
ただ、今回見つかったログで表示されているメソッド名がこちらで実装したものではなかった為に
現在調査を行っています。
エラーログ
2022-02-08T16:49:28.335 API実行権限なし。method:error
通常の権限エラーであれば、上記の"method"部分には
こちらで実装したコントローラクラスに含まれるメソッド名(例:getUserList、updateItemInfoなど)が表示されます。
errorメソッドは実装していないのですが、
これはSpringに含まれるデフォルトのエラーハンドリング用メソッドだったりするのでしょうか?
またその場合、このerrorメソッドはどういった時に呼ばれる処理なのでしょうか?
上記のエラーログは発生頻度が低く、どのような条件で出力されるのかまだ分かっていない為、
今のところエラーを再現できていません。
何かご存知の方がいらっしゃいましたらアドバイスをお願い致します。
ソースコード
Java
1@Component 2public class HogeInterceptor implements HandlerInterceptor { 3 4 private static final Logger LOGGER = LoggerFactory.getLogger(HogeInterceptor.class); 5 6 @Override 7 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 8 9 // 権限チェック 10 if (!hasAuthority(request, handler)) { 11 throw SystemErrorException("APIを実行可能な権限がありません。"); 12 } 13 14 // ~~~省略~~~ 15 } 16 17 //対象APIを実行可能な権限を持つかチェックする 18 private boolean hasAuthority(HttpServletRequest request, Object handler) throws Exception { 19 20 HandlerMethod handlerMethod = HandlerMethod.class.cast(handler); 21 Method method = handlerMethod.getMethod(); 22 23 // ~~~省略~~~ 24 25 if( 権限チェック ) { 26 return true; 27 } 28 29 LOGGER.error("API実行権限なし。method:" + method.getName());// <- ログに"API実行権限なし。method:error"と出力される。 30 return false; 31 } 32 33 // ~~~省略~~~ 34 35}
補足情報(FW/ツールのバージョンなど)
Java8
Spring 5.1.9
Spring Boot 2.1.7
Tomcat 9.0.26
MySQL 5.7
回答1件
あなたの回答
tips
プレビュー