首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NamingEnumeration中获取元素

从NamingEnumeration中获取元素
EN

Stack Overflow用户
提问于 2012-03-14 13:32:15
回答 1查看 9.6K关注 0票数 3

我正在尝试从命名枚举中提取元素。Naming枚举本身不是null,但是hasNext()给出了false。

我做错了什么?

代码语言:javascript
复制
public static void main(String[] args) {
try {
            DirContext context = new InitialDirContext(
                    Environment.getEnvironment());



            SearchControls controls = new SearchControls();
            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
             String[] attrIDs = { "cn", "givenname", "sn", "mail" };
             controls.setReturningAttributes(attrIDs);
            NamingEnumeration enumResult = context.search(
                    "DC=PORTAL,DC=COMPANY,DC=BE", "(CN=*)",
                    controls);
            System.out.println(enumResult.hasMore());

            context.close();

        } catch (AuthenticationException e) {
            System.out.println("Invalid credentials");
        } catch (NamingException e) {
            System.out.println("Lookup failed: " + e);
        }
}

AD的结构(在本地主机上使用AD-LDS)

DC=PORTAL,DC=COMPANY,DC=BE

->OU=Accounts

==>CN=John Doe

==>CN=Jane Doe

->CN=LostAndFound

->CN=NTDS配额

->CN=Roles

->OU=System账户

==>CN=PortalAdmin

将我的搜索基缩小到"OU=ACCOUNTS,DC=PORTAL,DC=COMPANY,DC=BE“会产生以下错误

查找失败: javax.naming.NameNotFoundException: LDAP:错误代码32 - 000020 8D: NameErr: DSID-031522C9,问题2001 (NO_OBJECT),数据0,最佳匹配:'DC=PORTAL,DC=COMPANY,DC=BE‘;剩余名称'OU=ACCOUNTS,DC=PORTAL,DC=COMPANY,DC=BE’

解决办法:

代码语言:javascript
复制
try {

            DirContext ctx = new InitialDirContext(Environment.getEnvironment());



            // Get all the attributes of named object
            Attributes attrs = ctx
                    .getAttributes("cn=John Doe,ou=Accounts,DC=PORTAL,DC=COMPANY,DC=BE");

            if (attrs == null) {
                System.out.println("No attributes");
            } else {
                /* Print each attribute */
                try {
                    for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) {
                        Attribute attr = (Attribute) ae.next();
                        System.out.println("attribute: " + attr.getID());

                        /* print each value */
                        for (NamingEnumeration e = attr.getAll(); e.hasMore(); System.out
                                .println("value: " + e.next()))
                            ;
                    }
                } catch (NamingException e) {
                    e.printStackTrace();
                }
            }



            ctx.close();

        } catch (AuthenticationException e) {
            System.out.println("Invalid credentials");
        } catch (NamingException e) {
            System.out.println("Lookup failed: " + e);
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-14 14:33:39

从做一些基本的健康检查开始。例如,Environment.getEnvironment()返回的数据是正确的(url、端口、用户、密码),并允许连接到目录服务器。还要检查是否存在网络问题,并且您实际上可以访问服务器。

尝试限制搜索基数,例如:"OU=Accounts,DC=PORTAL,DC=COMPANY,DC=BE“,看看是否返回了一些结果。还要检查预期结果中的对象是否具有属性"cn“、"givenname”、"sn“、"mail”。

除此之外,在问题中显示的代码中没有明显的错误,它应该可以正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9702998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档