Mam aplikacji, która używa zarówno LDAP i proste uwierzytelnianie bazy danych do logowania użytkowników. Tylko jeśli użytkownik nie istnieje w kontekście LDAP, aplikacja sprawdza, czy istnieje w bazie danych. Potrzebuję więc sposobu sprawdzenia, czy użytkownicy istnieją w LDAP, bez znajomości hasła. Wspominam, że nazwy użytkowników są unikalne.Jak mogę sprawdzić, czy podana jest nazwa użytkownika?
Używam tego kodu, który działa, jeśli mam poprawną nazwę użytkownika i hasło. Jeśli hasło LUB nazwa użytkownika są błędne, otrzymuję wyjątek. Byłoby idealnie, gdybym mógł uzyskać różne wyjątki, jeden, jeśli nazwa użytkownika nie istnieje, a drugi, jeśli podane hasło jest nieprawidłowe.
String username = "test";
String password = "pass";
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, "ldap://server.example.com:389");
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
String user = username + "@example.com";
environment.put(Context.SECURITY_PRINCIPAL, user);
environment.put(Context.SECURITY_CREDENTIALS, password);
try
{
DirContext context = new InitialDirContext(environment);
String searchBase = "DC=server,DC=example,DC=COM";
String FILTER = "(&(objectClass=user)(objectCategory=person)((sAMAccountName=" + username + ")))";
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> answer = context.search(searchBase, FILTER, ctls);
SearchResult result = answer.next();
Attribute email = result.getAttributes().get("mail");
Attribute cn = result.getAttributes().get("cn");
System.out.println(cn + " : " + email);
context.close();
}
catch (AuthenticationException a)
{
Logger.getLogger().info("Authentication failed: " + a.getExplanation());
}
catch (NamingException e)
{
Logger.getLogger().info("Failed to bind to LDAP: " + e.getExplanation());
}
Dzięki. To jest TYLKO sposób? Aby przeprowadzić wyszukiwanie, konieczne jest zalogowanie się? – radonys
Może nie, nie wiem. Właśnie wyjaśniam, dlaczego * twój * kod potrzebuje hasła użytkownika, aby sprawdzić, czy istnieje w LDAP. –
Niektórzy administratorzy zezwalają na anonimowe wyszukiwanie. Skontaktuj się z administratorem serwera katalogów. –