質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1550閲覧

Springにはデフォルトのerrorメソッドがある?

flaumig

総合スコア67

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

1クリップ

投稿2022/02/10 08:49

前提・発生している現象

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/10 08:57

それより前でアクセスURIとかリクエストパラメータとか出力されてませんか? アプリのログよりサーバーのログも見た方がいいかもしれません。 また、エラーページ( /error)のカスタマイズはされていますか?
flaumig

2022/02/10 10:36

ご確認ありがとうございます。 > それより前でアクセスURIとかリクエストパラメータとか出力されてませんか? > アプリのログよりサーバーのログも見た方がいいかもしれません。 現在、調査依頼をしてきた部門に詳細なログを問い合わせているのですが まだお返事を頂けていない状態なので確認できていません。 > また、エラーページ( /error)のカスタマイズはされていますか? フロントはVue.jsで、このアプリはREST APIのみを提供している為 エラーページのカスタマイズは行っておりません。
guest

回答1

0

自己解決

本アプリではFilterを継承したクラスで、対象のアクセスが認証済みかの確認をしていましたが、
該当のアクセスは未認証のアクセスであった為、Filterクラスでエラーとなり
Spring Bootのデフォルトのエラーコントローラクラス(下記)が呼ばれていました。

org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)

エラー処理のカスタマイズをしていない場合、Spring Bootではこのクラスが自動的に呼び出されるようです
その為、ログに出力されるメソッド名が"error"となっていました。

対応として、リクエストが認証済みかのチェックを厳密に行い、
未認証アクセス時は認証エラーを投げるようにしました。

投稿2022/02/15 10:08

flaumig

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問