我有一段代码在绑定操作后在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设置,匿名登录成功,如下图所示:
但搜索操作仍无法正常工作。
请建议我哪里出错了。
答案 0 :(得分:1)
答案 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
}