Java 如何在我的场景中使用客户异常
起初,我在阅读java中的一些异常知识,并给出了一些建议,例如,如果jdk中已经有定义良好的异常,就不要使用customer exception,不要使用customer exception来处理工作流。我同意这些观点,它们是绝对正确的。现在我在考虑如何处理这种情况。这很简单。用户登录 1个用户名不存在 2密码错误 这些将在DAO层中已知,我必须(最终)将有用的信息填充到控制器层,让控制器知道发生了什么,并在视图中显示有用的提示 当我第一次学习java时,我就是这样做的 这些是伪代码Java 如何在我的场景中使用客户异常,java,exception-handling,dao,Java,Exception Handling,Dao,起初,我在阅读java中的一些异常知识,并给出了一些建议,例如,如果jdk中已经有定义良好的异常,就不要使用customer exception,不要使用customer exception来处理工作流。我同意这些观点,它们是绝对正确的。现在我在考虑如何处理这种情况。这很简单。用户登录 1个用户名不存在 2密码错误 这些将在DAO层中已知,我必须(最终)将有用的信息填充到控制器层,让控制器知道发生了什么,并在视图中显示有用的提示 当我第一次学习java时,我就是这样做的 这些是伪代码 if
if(usernotexit)
{throw usernotExistException()}
if(password_wrong)
{throw passwordWrongException()}
这是一种好的做法吗?若否,如何妥善处理 假设堆栈上层的一些代码捕获异常并显示有用的信息,这种通用方法没有问题 但是,对于这种情况下的安全异常,明智的做法是不要在发送给用户的消息中区分这两种情况。如果您告诉用户哪一个是错误的,则此信息可用于探测有效用户 针对任一条件返回给用户的响应应为“身份验证失败”。这样,您就不会泄露任何有用的信息(例如,用户存在的信息)
请注意,在内部,您可能希望出于日志记录目的区分案例。只是不要告诉用户发生了哪种情况。尝试将这两种情况结合起来:
if(usernotexit || password_wrong)
{
throw user_password_Not_Match()
}
告诉终端用户用户名是否不正确或密码是否出于安全原因不是一个好的做法。为了更高的安全性,您应该抛出一个常规异常