2016-08-30 4 views
0

Я хочу получить DN пользователя с указанным именем пользователя. Я считаю, что хочу получить все пользовательские данные и сравнить их с именем пользователя. И теперь, я добавил objectclass в свой фильтр поиска, и я понятия не имею, почему данные не извлекаются. Вот коды, которые у меня есть.получение DN пользователя с именем пользователя LDAP

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

Вы пробовали отлаживать? Что вы там видите? Проверьте руководство здесь https://gist.github.com/sharomank/4592463 –

+1

Зачем вам это делать? Вы должны искать по атрибутам, которые вы хотите сопоставить. Например, '(& (objectClass = Person) (имя пользователя = {0})). Неясно, что вы спрашиваете. – EJP

+0

Я хотел бы использовать данное имя для поиска DN пользователя. –

ответ

0

Предоставить базовое DN для поиска. например ou = пользователи ниже и добавьте имя пользователя для фильтрации для более быстрого поиска. Не получайте все данные пользователя, поскольку вам излишне увеличивать сетевой трафик и выполнять дополнительную вычислительную работу на клиенте. LDAP-сервер отлично подходит для такого поиска. CN индексируется по умолчанию, но givenName не может быть проиндексирован; поэтому вы можете добавить индекс для этого атрибута.

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

Если у вас есть GivenName

NamingEnumeration result = context.search("ou=users", 
    "(&(objectClass=person)(givenName=" + givenName + "))", constraints); 
Смежные вопросы