jndi - LDAP JNDI 子树搜索

标签 jndi subtree

我在搜索 LDAP 时遇到问题。如果我使用以下代码,我可以使用以下代码获得级别 2。 但我想得到4级物体。感谢您的任何帮助。

当前搜索库:ou=HQ2-BR,过滤器:"(ou=*)";

问候, 文柏康, 戴夫 [email protected] [email protected]

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()

最佳答案

您可能需要使用 SearchControls.SUBTREE_SCOPE 构造 SearchControls 对象,并将其传递给 ctx.search 方法。请参阅example来自另一个答案。

关于jndi - LDAP JNDI 子树搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14994497/

相关文章:

java - 使用 java JNDI 更新信息 Activity 目录数据 ?

Tomcat JNDIRealm 验证并忽略所有角色

git - 我怎样才能 git subtree 远程的子目录?

python - 子树提取NLTK树

java - 通过 REST 或 JNDI 使用服务

java - GWT 1.7 - 在 Jetty 中配置数据源(托管模式)

mysql - C3P0 0.9.5-pre6 与 Jetty 9.1

git - 如何将补丁应用于 git 子树 merge ?

algorithm - 寻找最小子树

git - "Fatal: bad object"使用 git 子树推送时出错