在UI中显示LDAP错误

时间:2014-03-17 11:15:41

标签: java ldap

目前,我的代码用于更改存储在LDAP服务器上的密码。如果更新成功与否,我使用布尔变量来存储结果,之后我通过if语句检查更新是否失败,并显示错误消息。

我面临的问题是,如果密码更改失败,如何在UI中显示更具体的错误?

例如:

  • 现有密码无效
  • 用户名不正确
  • 帐户已被锁定

如果有人可以提出建议,我的问题可能是一个很好和整洁的解决方案。以下是重置密码方法的片段:

boolean passwordReset = this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);

if(!passwordReset){
        super.addMessage(FacesMessage.SEVERITY_ERROR,super.getResource("password.error"), super.getResource("user.password.change.error"));

} else {
    super.addMessage(FacesMessage.SEVERITY_INFO,super.getResource("change.password.head"), super.getResource("password.changed.success"));
}

1 个答案:

答案 0 :(得分:0)

我认为您应该修改userManagement.update方法以在出现错误时引发异常。因此,根据错误,它可能会抛出InvalidPasswordExceptionUsernameExceptionBlockedAccoutException等,或者仅使用自定义消息抛出异常。 在任何情况下,首先您需要从ldap操作中收集此信息。

示例代码:

try {
  this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);

} catch(InvalidPasswordException e) {
  super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("password.error"), super.getResource("user.password.change.error"));
} catch(UsernameException e) {
  super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("username.error"), super.getResource("user.name.error"));
} catch(BlockedAccoutException e) {
  super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("blockaccount.error"), super.getResource(blockaccount.error"));
}

或者:

try {
  this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);
} catch(UpdateUserException e) {
  super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource(e.getErrorCode()));
}

第一种方法的问题是你必须创建几个(或很多)类。 第二个选项不会发生这种情况,但您需要一种方法来获取正确的错误消息。您可以向异常添加错误类型/代码。