使用匿名绑定进行活动目录搜索

时间:2013-01-08 05:09:11

标签: active-directory jndi

我有一段代码在绑定操作后在Active Directory服务器上执行搜索。我正在使用LDAP协议进行绑定,我的代码如下所示:

    env.put(Context.INITIAL_CONTEXT_FACTORY,
            "com.sun.jndi.ldap.LdapCtxFactory");

    env.put(Context.SECURITY_AUTHENTICATION, "none");
    env.put("com.sun.jndi.ldap.read.timeout", "9000");
    env.put("com.sun.jndi.ldap.connect.timeout", "9000");

            env.put(Context.PROVIDER_URL, "ldap://" + "nec.jp");
            DirContext ctx = new InitialDirContext(env);
            NamingEnumeration<SearchResult> answer = ctx.search(
                        searchBase, searchFilter, searchCtls);
        if (answer.hasMore())
           {
                    env.put(Context.SECURITY_PRINCIPAL, principalNameres);
                    env.put(Context.SECURITY_CREDENTIALS, userPasswd);
                    env.put(Context.SECURITY_AUTHENTICATION, "simple");
                    final DirContext ctxForSerachedResult = new InitialDirContext(
                            env);
                    ctxForSerachedResult.close();

          }

我的问题在于配置AD服务器以便与匿名登录用户进行搜索。

根据目前的理解,可以通过执行以下步骤来启用匿名:

一个。通过更改DsHeuristics属性值启用匿名LDAP操作。

湾提供读取目录的权限。

推荐链接:

我曾尝试使用LDP.exe批准Active Directory设置,匿名登录成功,如下图所示:

但搜索操作仍无法正常工作。

请建议我哪里出错了。

2 个答案:

答案 0 :(得分:1)

你显然只显示了你的部分片段,并且你不分享不起作用的内容。

你有什么期待。

我们确实有一个sample for JNDI可能有帮助,即使它不是匿名绑定。

答案 1 :(得分:1)

很抱歉发布了很晚的答案。下面显示的代码更改已经解决了:)

       DirContext ctx = new InitialDirContext(env);

            final NamingEnumeration<SearchResult> answer = ctx.search(
                    searchBase, searchFilter, searchCtls);
            if (answer.hasMore()) {
                /*
                 * Retrieving providerUrl and principal from the answer
                 * returned after search
                 */
                if (bindAlgoValue.equals(BINDANONYMOUS)) {
                    env.put(Context.SECURITY_AUTHENTICATION, BINDSIMPLE);
                }
                final SearchResult res = answer.next();
                final String principalName = res.getNameInNamespace();
                final String providerUrl = res.getName();
                if (!res.isRelative()) {
                    env.put(Context.PROVIDER_URL, providerUrl);
                }
                env.put(Context.SECURITY_PRINCIPAL, principalName);
                env.put(Context.SECURITY_CREDENTIALS, userPasswd);
                ctx = new InitialDirContext(env);
                ctx.close();
                return true;
                // Code Fix End for BUG ID #1304
            }