0


LDAP のディレクトリ コンテキストがありますが、そのディレクトリ コンテキスト オブジェクトから BASE DN を見つける必要があります。ディレクトリ コンテキスト オブジェクトを取得する次のコードがあります。

// Configure our directory context environment.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://test.mycomp.com:389");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
env.put(Context.SECURITY_PRINCIPAL,"uid=test.gen,OU=Generics,O=test.mycomp.com");
env.put(Context.SECURITY_CREDENTIALS, "test123");
DirContext dirContext = new InitialDirContext(env);
System.out.println("loaded dirContext");

ベース DN を取得するための次のコードがあります。ベース DN 名を返していますが、ベース DN を取得するために 2 つのループを配置するのではなく、フィルターを最適化したいと考えています。

    SearchControls constraints = new SearchControls();
    constraints.setSearchScope(SearchControls.OBJECT_SCOPE);
    NamingEnumeration results = dirContext.search("",
            "(&(objectClass=organization)(objectClass=top))", constraints);

        // Fail if no entries found
    if (results == null || !results.hasMore()) {
        System.out.println("No result found");
        return;
    }

    while(results.hasMoreElements()){
        Object res = results.next();
        SearchResult serResult = (SearchResult) res;
        Attributes atts = serResult.getAttributes();
        System.out.println(atts.toString());
        Attribute baseAttr = atts.get("namingContexts");
        NamingEnumeration  ids = baseAttr.getAll();
        while(ids.hasMoreElements()){
            Object obj = ids.next();
            System.out.println(obj.toString());
        }
    }

フィルターを最適化するのを手伝ってください。

4

2 に答える 2

4

検索は必要ありません。InitialContext から NamingContexts 属性を取得するだけです。

Attributes atttrs = context.getAttributes("", new String[]{"namingContexts"});
于 2011-10-15T21:39:22.787 に答える
0

namingContextsLDAP 準拠のディレクトリ サーバーは、ルート DSE が照会されたときに関する情報を提供する必要があります。ルート DSE の詳細については、「LDAP: ルート DSE」を参照してください。UnboundID LDAP SDKは、ルート DSE をカプセル化するクラスと、ルート DSE を取得する便利なメソッドを提供します。

于 2011-10-15T10:06:50.100 に答える