5
LDAP 및 간단한 데이터베이스 인증을 사용하여 사용자를 로그인하는 응용 프로그램이 있습니다. 사용자가 LDAP 컨텍스트에없는 경우에만 응용 프로그램이 해당 데이터베이스에 있는지 확인합니다. 따라서 암호를 모른 채 사용자가 LDAP에 있는지 확인하는 방법이 필요합니다. 나는 사용자 이름이 유일하다는 것을 언급한다.주어진 사용자 이름이 있는지 어떻게 확인할 수 있습니까?
이 코드는 올바른 사용자 이름과 암호가 있으면 작동합니다. 암호 또는 사용자 이름이 틀린 경우 예외가 발생합니다. 다른 예외를 얻을 수 있다면 이상적입니다. 하나는 사용자 이름이 없으면, 다른 하나는 제공된 비밀번호가 잘못되었을 때입니다.
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());
}
감사합니다. 이것은 유일한 방법입니까? 수색을하기 위해서는 반드시 로그인해야합니다. – radonys
아마, 모르겠다. LDAP에 암호가 있는지 확인하기 위해 사용자 암호가 필요한 이유를 설명하는 것입니다. –
일부 관리자는 익명 검색을 허용합니다. 디렉토리 서버 관리자에게 문의하십시오. –