私は Java を初めて使用し、エラー スタック トレースがスローされ、その後 Web アプリケーションのエンド ユーザーに表示されるときに使用される書式設定規則に精通していません。
Oracle データベースでの私の経験では、エラー スタックには、スキーマやプロシージャ名、行番号などの内部情報が含まれています。これは、デバッグには役立ちますが、ユーザーには見えないようにしたいと考えています。次に例を示します。
java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10
ユーザーに表示したい文字列はError description here
. 正規表現を使用してこの文字列を抽出できます。これは、(1) この文字列は常に最初の行にあるため、エラー スタック トレースの最初の行を抽出できること、(2) この文字列は常に末尾で始まりError
末尾で終わることがわかっているためです。行の。[Oracle ユーザーへの注意 (誤解を招きたくない): 上記は、RAISE_APPLICATION_ERROR を で始まるエラー文字列で使用した場合にのみ適用されます。Error
それ以外の場合、テキストError
は表示されません]。
Java に関する私の質問は次のとおりです。
(1) エラー スタックでユーザーに見せたくない機密性の高いものはありますか? もしそうなら、何?たとえば、ファイル パス、サーバー名/IP などです。
(2) 非機密情報を抽出するために信頼できる Java エラー スタック トレースのフォーマット規則はありますか? または、他の人はこの懸念にどのように対処しますか?
更新 1:
これまでのすべての返信に感謝します。非常に役に立ちました。多くの人が、エラーを有用なユーザー メッセージにマップするなどの機能を使用するようにコメントしていますがgetUserFriendlyMessage()
、誰かがこのマッピングを拡張できるのではないかと思います。つまり、一般的なエラー (SQL、I/O など) の場合、このエラー スタックを検索して発生したエラーの種類を特定するために使用できる "信頼できる" 識別子と、対応するどのテキスト文字列をお勧めしますか?このエラー メッセージにマップしてユーザーに表示するには? 以下の@Adarshrの応答は良いスタートです。例えば、
Identified Expected If found in error stack, display this friendly msg to user
------------------- ----------------------------------------------------------
SQLException An error occurred accessing the database. Please contact support at support@companyname.com.
IOException Connection error(?). Please check your internet connection.
コンパイル関連のエラーに対処する必要はないと仮定しますが、通常の使用中にエンド ユーザーが経験する可能性のあるエラーに焦点を当てます。参考までに、ランタイム エラー メッセージのリストを以下に示します: http://mindprod.com/jgloss/runerrormessages.html#IOEXCEPTION
または、スタック トレースの FIRST LINE を使用してユーザーに表示することはできますか? このリンクは、上記の最初の質問で私が得ていたもののようなものです:
http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html
たとえば、識別子Exception
が常に使用されている場合Exception
、最初の行と最後の行の間にあるテキストを単純に抽出できます。いつもそこにいると頼れるかどうかはわかりませんException
。