Я согласен с тем, что наилучшая практика заключается не в том, чтобы объяснить причину.
-
Но если у вас есть, чтобы сделать это независимо от того, что:
Сделайте search
с Логина, чтобы проверить, Имя пользователя существует. Если он не существует, это ошибка.
Если пользователь существует и продолжает аутентифицироваться, но вы получаете AuthenticationException, то это неправильный пароль.
-
Edit:
If(checkUserExists(username)){
//construct the hashtable environment
//...
ht.put(Context.SECURITY_PRINCIPAL, username);
ht.put(Context.SECURITY_PRINCIPAL, password);
//...
try {
localLdapContent = new InitialLdapContext(ht, null);
} catch (Exception e) {
//suppose it's a wrong password
}
}else{
//error user doesn't exist
}
Вам нужно другое соединение LDAP с разрешения для проверки пользователя для всех запросов.
boolean checkUserExists(String username) {
//...
ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_username);
ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_password);
//...
adminconn = new InitialLdapContext(ht_administrator, null);
return adminconn.search(
"uid="+username+",ou=people,dc=example,dc=com", "(objectclass=*)", searchControls
).hasMore();
}
Я не показываю, какой из них неправилен в пользовательском интерфейсе, но мой код должен понять, какой из них не соответствует ни имени пользователя, ни паролю. –