2016-08-30 16 views
0

ユーザー名を指定してユーザーDNを取得したいとします。 私は、すべてのユーザーデータを取得し、ユーザー名と比較したいと考えています。 これで、検索フィルターにobjectclassが追加されました。なぜデータが取得されないのかわかりません。 ここに私が現在持っているコードがあります。ユーザー名がLDAPのユーザーDNを取得する

Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, url); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, "cn=admin,ou=sa,o=system"); 
    env.put(Context.SECURITY_CREDENTIALS, "[email protected]"); 

    try{ 
    DirContext context = new InitialDirContext(env); 
    SearchControls constraints = new SearchControls(); 
    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    NamingEnumeration result = context.search("", "(objectclass=Person)", constraints); 
    while(result.hasMore()) 
    { 
     SearchResult searchResult = (SearchResult) result.next(); 
     Attributes attrs = searchResult.getAttributes(); 
     request.setEmail(attrs.get("mail").toString()); 
     request.setPhoneNumber(attrs.get("personalMobile").toString()); 
     Attribute ldapattr = attrs.get("photo"); 
     if(ldapattr != null){ 
      byte[] photo = (byte[])ldapattr.get(); 
      request.setPhoto(photo); 
     } 
    } 
    }catch(Exception e){ 
     System.out.println("can't initialized"); 
    } 
    list.add(request); 
    //Specific URL of LDAP with the host and :port 
    return list; 
} 
+0

をお持ちの場合は

NamingEnumeration result = context.search("ou=users", "(&(objectClass=person)(sAMAccountName=" + userId + "))", constraints); 

あなたはデバッグしようとしたことがありますか?そこには何が見えますか?ここでガイダンスを確認してくださいhttps://gist.github.com/sharomank/4592463 –

+1

なぜこれをしますか?一致させる属性で検索する必要があります。たとえば、 '(&(objectClass = Person)(username = {0}))'とします。あなたが何を求めているのか不明です。 – EJP

+0

私が望んだのは、指定された名前を使用してユーザーDNを見つけることです。 –

答えて

0

検索するベースDNを指定します。例えばou =以下のユーザーを追加し、ユーザー名を追加してフィルタを高速化します。 不必要にネットワークトラフィックが増加し、クライアントで追加の計算作業が行われるため、すべてのユーザーデータを取得しないでください。 LDAPサーバーはこの種の検索に優れています。 CNはデフォルトで索引付けされますが、givenNameは索引付けされません。この属性の索引を追加することもできます。あなたはgivenName属性

NamingEnumeration result = context.search("ou=users", 
    "(&(objectClass=person)(givenName=" + givenName + "))", constraints); 
関連する問題