2

LDAP の検索に問題があります。次のコードを使用すると、次のコードを使用してレベル 2 を取得できます。しかし、レベル 4 のオブジェクトを取得したいです。親切な助けをありがとう。

現在の検索ベース: ou=HQ2-BR、フィルター:"(ou=*)";

よろしく、 マン・パク・ホン、デイブ manpakhong@hotmail.com manpakhong@gmail.com

LDAP 構造

  • o=com,dc=rabbitforever #(レベル 0)
    • ou=HQ2-BR // 他の広告への参照 #(レベル 1)
      • ou=TSB // #(レベル 2)
      • ou=BM1 // #(レベル 2)
      • ou=IIC // #(レベル 2)
        • ou=People // #(レベル 3)
          • uid=IICCIO // #(レベル 4)
          • uid=IICSIO1 // #(レベル 4)

コード:

public void loopLDAP() {
    String adminName = "uid=writer,ou=People,o=com,dc=rabbitforever";
    String adminPassword = "password";

    Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
            "com.sun.jndi.ldap.LdapCtxFactory");
    //env.put(Context.PROVIDER_URL,
    //        "ldap://192.168.1.127:389/dc=rabbitforever,dc=com");
    env.put(Context.PROVIDER_URL,
            "ldap://10.10.176.156:389/o=com,dc=rabbitforever");
    //env.put(Context.SECURITY_AUTHENTICATION, "none");

    env.put(Context.SECURITY_PRINCIPAL, adminName);
    env.put(Context.SECURITY_CREDENTIALS, adminPassword);
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.REFERRAL, "follow");

    try {
        LdapContext ctx = new InitialLdapContext(env, null);
        ctx.setRequestControls(null);

        String filter = "(ou=*)";

        NamingEnumeration<?> namingEnum = ctx.search("ou=HQ2-BR", filter,
                getSimpleSearchControls());
        while (namingEnum.hasMore()) {
            SearchResult result = (SearchResult) namingEnum.next();
            Attributes attrs = result.getAttributes();

            String cn = "";
            String sn = "";
            String description = "";
            String uid = "";
            if (null != attrs.get(cn)) {
                cn = attrs.get("cn").toString();
            }
            if (null != attrs.get("sn")) {
                sn = attrs.get("sn").toString();
            }
            if (null != attrs.get("description")) {
                description = attrs.get("description").toString();
            }
            if (null != attrs.get("uid")) {
                uid = attrs.get("uid").toString();
            }
            System.out.println(cn + " | " + sn + " | " + description
                    + " | " + uid);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
} // end loopLDAP()
4

1 に答える 1

2

おそらく、SearchControlsオブジェクトをで構築し、それをメソッドSearchControls.SUBTREE_SCOPEに渡す必要があります。別の回答のctx.searchを参照してください。

于 2013-03-25T15:55:13.087 に答える