2

LDAP ツリーのルート コンテキストを一覧表示または検索したいと考えています。私は Apache Directory Server と Java を使用しています。

    Hashtable<String, String> contextParams = new Hashtable<String, String>();
    contextParams.put("java.naming.provider.url", "ldap://localhost:10389");
    contextParams.put("java.naming.security.principal", "uid=admin,ou=system");
    contextParams.put("java.naming.security.credentials", "secret");
    contextParams.put("java.naming.security.authentication", "simple");
    contextParams.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");

    DirContext dirContext = new InitialDirContext(contextParams);

    NamingEnumeration<NameClassPair> resultList;

    //Works
    resultList = dirContext.list("ou=system");
    while (resultList.hasMore()) {
        NameClassPair result = resultList.next();
        System.out.println(result.getName());
    }

    //Does not work
    resultList = dirContext.list("");
    while (resultList.hasMore()) {
        NameClassPair result = resultList.next();
        System.out.println(result.getName());
    }

ou=system のサブノードを一覧表示できます。しかし、実際のルート ノードのサブノードを一覧表示することはできません。Apache Directory Studio と同じように、このリストを作成したいと思います: alt text http://lesc.se/stackoverflow/ldap_root_contexts.png

4

1 に答える 1

4

ベース DN は、ルート ノード (RootDSE) の NamingContexts 属性から取得できます。コードは次のようになります。

Attributes attributes = dirContext.getAttributes( "", new String[]{"namingContexts"} );
Attribute attribute = attributes.get( "namingContexts" );
NamingEnumeration<?> all = attribute.getAll();
while(all.hasMore())
{
    String next = (String)all.next();
    System.out.println(next);
}
于 2010-04-11T09:08:48.667 に答える