2017-02-16 4 views
4

LDAPContextクラスを使用する特定のユーザーを検索し、存在するかどうかを試します。しかし、search()メソッドは空の応答を返します。テスト中LDAPContext.search()は空の結果を返します

private int checkUserOnLDAP() { 

    String strLDAPServer = "ldap://ldap.forumsys.com:389"; 
    String strLDAPPricipal = "cn=read-only-admin,dc=example,dc=com"; 
    String strPassword = "password"; 
    String strSearchBase = "ou=mathematicians,dc=example,dc=com"; 
    String strUserToSearch = "riemann"; 

    Hashtable<String, String> environment = new Hashtable<String, String>(); 
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    environment.put(Context.PROVIDER_URL, strLDAPServer); 
    environment.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    environment.put(Context.SECURITY_PRINCIPAL, strLDAPPricipal); 
    environment.put(Context.SECURITY_CREDENTIALS, strPassword); 

    LdapContext ctxGC = null; 
    try { 
     ctxGC = new InitialLdapContext(environment, null); 
     ctxGC.getAttributes(""); 
    } catch (NamingException e) { 
     System.err.print("SEARCHER BLOCKED USER"); 
     e.printStackTrace(); 
    } catch (Exception e) { 
     System.err.print("SEARCHER WRONG PASSWORD"); 
     e.printStackTrace(); 
    } 

    System.out.println("SEARCHER LOGIN SUCCESSFUL"); 

    System.out.println("NOW TRYING TO SEARCH"); 
    try { 
     String searchFilter = "(&(objectClass=user)(sAMAccountName=" + strUserToSearch + "))"; 
     String returnedAtts[] = new String[0]; 
     SearchControls searchCtls = new SearchControls(); 
     searchCtls.setReturningAttributes(returnedAtts); 
     searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
     NamingEnumeration<?> answer = ctxGC.search(strSearchBase, searchFilter, searchCtls); 

     if (answer.hasMoreElements()) { 
      Object a = answer.nextElement(); 
      System.out.println("SUCCESFULLY, FOUND USER"); 
      return 0; 
     } else { 
      System.out.println("ANSWER HAS NO ELEMENTS"); 
     } 
    } catch (Exception e) { 
     System.out.println("SEARCH FAILED"); 
     e.printStackTrace(); 
    } 

    return 0; 
} 

、私はオンラインのLDAPサービスを使用します。http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/

は、私は、ユーザーが存在するかどうかを確認することができますどのようにこのオンラインテストサービスを考えると?

+0

私はサンプルを創設しました。それはあなたに役立つ可能性があります:https://github.com/shardayyyy/ldap/blob/1d7ef92334c529b25f3cf4ecd5d1e90d8e2139dc/src/LDAPTest.java – ziLk

答えて

1

検索フィルターにはsAMAccountName属性が使用されていますが、その属性はテストサーバーでは使用できません。代わりにuidを使用してください。

+0

私のクエリは、特定の検索フィルタを持つユーザーを見つけることができないようです。しかし、 "sAMAccountName"と "uid"の両方で動作するわけではありません。 – bahtiyartan

+0

サーバーを見ると、文書化されたエントリがなくなっています。特にouノードは空です。あなたは検索ベース 'dc = example、dc = com'を持つエントリを見つけるでしょう。そのため、LDAPブラウザを使用して結果を確認する必要があります。 – marabu

+0

はいそれは動作します。検索ベースとして "dc = example、dc = com"、フィルタに "(&(objectClass = person)(uid = riemann))"を指定します。ありがとう。 – bahtiyartan

関連する問題