LDAP搜索返回意外的对象类型

时间:2014-04-07 08:59:48

标签: ldap jndi tivoli

我正在针对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);

3 个答案:

答案 0 :(得分:0)

  

我希望o的类型为NamingEnumeration,但它的类型为DirContext。

为什么呢? NamingEnumerations方法返回search()。不是lookup()方法。文档中没有任何内容可以暗示其他内容。

答案 1 :(得分:0)

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

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

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

            }