获取用户名为LDAP的用户DN

时间:2016-08-30 10:25:58

标签: java web-services ldap

我希望用提供的用户名获取用户DN。 我认为我想要检索所有用户数据并与用户名进行比较。 现在,我在搜索过滤器中添加了objectclass,我不知道为什么数据没有检索。 以下是我目前的代码。

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, "P@ssw0rd");

    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;
}

1 个答案:

答案 0 :(得分: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);