2011-09-29 6 views
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()); 
    } 

답변

3

사용자 이름 만 사용하여 LDAP에서 사용자를 검색하고 있습니다. 그러나 LDAP에 인증하려면 검색된 사용자 이름과 암호를 사용하고 있어야합니다.

다른 (admin) 사용자와 비밀번호를 사용하여 인증하고, 사용자 검색에서 결과가 반환되면 true를 반환하십시오.

+0

감사합니다. 이것은 유일한 방법입니까? 수색을하기 위해서는 반드시 로그인해야합니다. – radonys

+0

아마, 모르겠다. LDAP에 암호가 있는지 확인하기 위해 사용자 암호가 필요한 이유를 설명하는 것입니다. –

+1

일부 관리자는 익명 검색을 허용합니다. 디렉토리 서버 관리자에게 문의하십시오. –

관련 문제