Я поддерживаю некоторый устаревший код Java LDAP. Я почти ничего не знаю о LDAP.
Программа ниже в основном просто отправляет идентификатор пользователя и пароль на сервер LDAP, получает уведомление, если учетные данные являются хорошими. Если это так, он печатает атрибуты LDAP, полученные с сервера LDAP, если не выводит исключение.
Все работает хорошо, если задан неверный пароль. Исключено исключение "недопустимые учетные данные". Однако, если пустой пароль отправлен на сервер LDAP, аутентификация все равно будет выполняться, атрибуты LDAP будут по-прежнему возвращаться.
Является ли эта неприятная ситуация из-за того, что сервер LDAP допускает использование пустых паролей, или нужно изменить код ниже, так что пустой пароль будет загружаться на сервер LDAP таким образом, чтобы он был отклонен?
У меня есть проверка данных на месте. Я взял его в тестовой среде, чтобы решить другую проблему и заметил эту проблему. Я бы предпочел не иметь эту проблему под валидацией данных.
Большое спасибо за любую информацию
import javax.naming.*;
import javax.naming.directory.*;
import java.util.*;
import java.sql.*;
public class LDAPTEST {
public static void main(String args[]) {
String lcf = "com.sun.jndi.ldap.LdapCtxFactory";
String ldapurl = "ldaps://ldap-cit.smew.acme.com:636/o=acme.com";
String loginid = "George.Jetson";
String password = "";
DirContext ctx = null;
Hashtable env = new Hashtable();
Attributes attr = null;
Attributes resultsAttrs = null;
SearchResult result = null;
NamingEnumeration results = null;
int iResults = 0;
int iAttributes = 0;
env.put(Context.INITIAL_CONTEXT_FACTORY, lcf);
env.put(Context.PROVIDER_URL, ldapurl);
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=" + loginid + ",ou=People,o=acme.com");
env.put(Context.SECURITY_CREDENTIALS, password);
try {
ctx = new InitialDirContext(env);
attr = new BasicAttributes(true);
attr.put(new BasicAttribute("uid",loginid));
results = ctx.search("ou=People",attr);
while (results.hasMore()) {
result = (SearchResult)results.next();
resultsAttrs = result.getAttributes();
for (NamingEnumeration enumAttributes = resultsAttrs.getAll(); enumAttributes.hasMore();) {
Attribute a = (Attribute)enumAttributes.next();
System.out.println("attribute: " + a.getID() + " : " + a.get().toString());
iAttributes++;
}// end for loop
iResults++;
}// end while loop
System.out.println("Records == " + iResults + " Attributes: " + iAttributes);
}// end try
catch (Exception e) {
e.printStackTrace();
}
}// end function main()
}// end class LDAPTEST