您不应该向用户展示任何这种愚蠢的东西。对于大多数人来说这毫无意义,也无济于事。如您所怀疑,它还暴露了实施的内部结构,这些内部结构可能暗示恶意用户可能使用的漏洞。
相反,您应该捕获异常,将其记录下来,并向用户显示更易理解的错误消息。您可以
getMessage()用来提取异常的消息部分。如果该异常没有消息,则显示诸如“没有可用的详细信息”之类的内容。
更新:
根据问题更新,我有一些评论。首先,我将使用户与系统的任何内部组件完全隔离,这既对用户友好,又出于安全考虑。(例如,即使知道您正在使用java.sql程序包,也可能向聪明的黑客暗示漏洞。)因此,在向用户显示任何内容时,请不要使用异常消息,堆栈跟踪的第一行或类似内容。
。
其次,您应该将所有错误从异常级别(在代码中遇到的错误)映射到用户正确抽象级别的消息。正确的方法取决于系统的内部以及引发异常时用户可能试图执行的 *** 作。这可能意味着将您的系统分为多个层,以便每个捕获到异常的层都将其转换为更高抽象层的异常。Java异常可以包装其他异常(原因)。例如:
public boolean copyFile(File source, File destination) throws CopyException { try { // lots of pre return true; } catch (IOException e) { throw new CopyException("File copy failed", e); }}
然后可以在User类的更高级别使用它:
public boolean shareFile(File source, User otherUser) throws ShareException { if (otherUser.hasBlocked(this) { throw new ShareException("You cannot share with that user."); } try { return copyFile(source, otherUser.getSharedFileDestination(source)); } catch (CopyException e) { throw new ShareException("Sharing failed due to an internal error", e); }}
(我希望很明显,以上代码旨在说明将异常转换为更高抽象级别的想法,而不是建议您在系统中使用的代码。)
您想要处理这样的事情(而不是通过某种方式来处理消息和/或堆栈跟踪)的原因是,异常(例如,带有消息“权限被拒绝”的IOException)可能对用户(以及您的系统)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)