0

最初我在阅读java中的一些异常知识。我经历了一些建议,例如如果jdk中已经存在明确定义的异常,则不要使用客户异常,不要使用客户异常来处理工作流程。我同意这些观点,它们是绝对正确的。现在我正在考虑如何处理这种情况。这很简单。用户登录。

1 用户名不存在 2 密码错误

这些将在 DAO 层中知道,我必须(最终)将有用的信息填充到控制器层,并让控制器知道发生了什么并在视图中显示有用的提示。

当我第一次学习java时,我是这样做的

这些是伪代码;

   if(usernotexit)
     {throw usernotExistException()}
   if(password_wrong)
     {throw passwordWrongException()}

这是一个好习惯吗?如果没有,如何正确地做到这一点?

4

2 回答 2

0

假设堆栈较高的一些代码正在捕获异常并显示有用的信息,那么这种通用方法没有问题。

但是,对于这种情况下的安全异常,明智的做法是不要在发给用户的消息中区分这两个条件。如果您告诉用户哪一个是错误的,则此信息可用于探测有效用户。

对于任一条件返回给用户的响应都应该是“身份验证失败”。这样你就没有泄露任何有用的信息(例如,用户存在)。

请注意,在内部,您可能希望区分这些案例以用于记录目的。只是不要告诉用户发生了哪一个。

于 2012-09-17T03:41:22.657 回答
0

尝试结合这两种情况:

    if(usernotexit || password_wrong)
     {
        throw user_password_Not_Match()
     }

出于安全原因,告诉最终用户是用户名错误还是密码不是一个好习惯。出于更高的安全目的,您应该抛出一般异常。

于 2012-09-17T03:44:26.597 回答