Java: какую информацию в трассировке стека ошибок мы обычно не хотим показывать пользователям?

Я новичок в java и не очень хорошо знаком с правилами форматирования, используемыми трассировкой стека ошибок, когда она генерируется и впоследствии отображается конечному пользователю моего веб-приложения.

Мой опыт работы с базой данных Oracle показывает, что стек ошибок содержит внутреннюю информацию, такую ​​как имена схем и процедур и номера строк, которые, хотя и полезны для отладки, я хотел бы скрыть от пользователя. Вот пример:

java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10

Строка, которую я хочу показать пользователю: Описание ошибки здесь. Я могу извлечь эту строку с помощью регулярных выражений, потому что я знаю, что (1) эта строка всегда находится в первой строке, поэтому я могу извлечь первую строку трассировки стека ошибок, и (2) эта строка всегда начинается с Errorи заканчивается концом строки. [Примечание для пользователей Oracle (не хочу вводить вас в заблуждение): вышеизложенное применимо только при использовании RAISE_APPLICATION_ERROR со строкой ошибки, начинающейся с Error, в противном случае текста Errorтам нет ].

Мои вопросы по Java:

(1) Есть ли что-то потенциально конфиденциальное, что вы не хотите, чтобы пользователи видели в стеке ошибок? Если так, то? Например, пути к файлам, имя/IP-адрес сервера и т. д.

(2) Существуют ли какие-либо правила форматирования для трассировки стека ошибок Java, на которые я могу положиться при извлечении неконфиденциальной информации? Или как другим решить эту проблему?

ОБНОВЛЕНИЕ 1:

Спасибо за все ответы, они были очень полезны. Хотя многие люди комментируют использование такой функции, как getUserFriendlyMessage(), для сопоставления ошибок с полезными пользовательскими сообщениями, мне интересно, может ли кто-нибудь расширить это сопоставление. То есть для распространенных ошибок (SQL, ввод-вывод и т. д.), какой «надежный» идентификатор можно использовать для поиска в этом стеке ошибок, чтобы определить тип произошедшей ошибки, а затем какую соответствующую текстовую строку вы бы порекомендовали. сопоставить с этим сообщением об ошибке, чтобы показать пользователю? Ответ @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

В качестве альтернативы можно просто использовать ПЕРВУЮ СТРОКУ трассировки стека для отображать пользователю? Эта ссылка похожа на то, что я имел в виду в своем первоначальном вопросе выше:

http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html

Например, если идентификатор Exceptionиспользуется всегда, можно просто извлечь текст, который находится между Exceptionи концом первой строки. Я не знаю, можем ли мы полагаться на то, что Exceptionвсегда будет там.

11
задан ggkmath 8 June 2012 в 20:33
поделиться