LDAP上的登录用户获取所有详细信息

时间:2019-01-23 11:03:52

标签: java active-directory ldap

我已经使用以下方法完成了到Java中LDAP服务器的连接:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://XXX");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "DOMAIN\\user.name"); 
env.put(Context.SECURITY_CREDENTIALS, "password");
DirContext ctx = new InitialDirContext(env);
if(ctx != null){
    // get details : samaccount, mail, userprincipal, all fields from AD
}

我是所有计算机语言的新手,但是在PHP中,我可以使用 samaccountname(与之前的代码中的user.name相同),并且搜索返回 该用户所有详细信息的关联数组。如何用Java做到这一点? 只需完成绑定并创建上下文后,只需使用samaccountname(用户将只输入user.name值和密码)即可 得到他的所有细节。

谢谢。

(PS:我在Google上找不到任何可以提供帮助的东西)。

1 个答案:

答案 0 :(得分:1)

您可以提供搜索基础和过滤器,下面是一个示例:

String USER_SEARCH_BASE = "OU=somegroup,dc=company,dc=com";
String USER_SEARCH_FILTER = "(&(sAMAccountName=%username%)(objectclass=user))"

然后在上下文中搜索用户:

    Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://XXX");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "DOMAIN\\user.name"); 
            env.put(Context.SECURITY_CREDENTIALS, "password");
            DirContext ctx = new InitialDirContext(env);
            if(ctx != null){
               String []requiredAttributes = {"sn","cn","sAMAccountName","memberOf"};
               SearchControls controls = new SearchControls();
               controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
               controls.setReturningAttributes(requiredAttributes);
               SearchResult searchResult = null;
               NamingEnumeration user = ctx.search(USER_SEARCH_BASE, USER_SEARCH_FILTER, controls);
    while(users.hasMore()){
                searchResult=(SearchResult)users.next();
                Attributes attr = searchResult.getAttributes();
                String commonName = attr.get("cn").get(0).toString();
                System.out.println("Common Name: " + commonName);
               }

            }

或者您可以调试上下文并检查所有可用属性。 希望对您有所帮助。