2

在绑定操作之后,我有一段代码在活动目录服务器上执行搜索。我正在使用 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 设置,如下图所示:

但是搜索操作仍然无法按预期工作。

请建议我哪里出错了。

4

2 回答 2

1

您显然只显示了您的部分片段,并且您不分享不工作的内容。

你在期待什么。

我们确实有一个JNDI 示例,即使它不是匿名绑定,它也可能会有所帮助。

于 2013-01-08T10:36:33.357 回答
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
            }
于 2013-09-11T04:57:20.127 回答