0

我正在针对 IBM Tivoli Directory Server 发出 LDAP 查询(我正在查询特殊用户“cn=monitor”,但我不知道这是否重要)。

我执行以下代码: DirContext ctx = new InitialDirContext(env); 对象 o = ctx.lookup ("cn=monitor");

我原以为 o 是 NamingEnumeration 类型,但它却是 DirContext 类型。我不知道如何从这个对象类型中获取返回的数据。

奇怪的是,我可以看到我想要的数据正在被获取,因为我使用以下命令设置了调试: env.put("com.sun.jndi.ldap.trace.ber", System.out);

4

3 回答 3

0

我发现我应该使用 search() 而不是 lookup()。

我之前尝试过 search() ,但由于范围设置不正确而失败。我解决了这个问题,现在我的代码正在运行,

于 2014-04-08T09:00:33.237 回答
0

我原以为 o 是 NamingEnumeration 类型,但它却是 DirContext 类型。

为什么?NamingEnumerationssearch()方法返回。不是lookup()方法。文档中没有其他建议。

于 2014-04-07T09:46:49.353 回答
0

如果有帮助,示例代码:

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

            }
于 2019-01-23T17:16:59.723 回答