我正在尝试从命名枚举中提取元素。Naming枚举本身不是null,但是hasNext()给出了false。
我做错了什么?
public static void main(String[] args) {
try {
DirContext context = new InitialDirContext(
Environment.getEnvironment());
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = { "cn", "givenname", "sn", "mail" };
controls.setReturningAttributes(attrIDs);
NamingEnumeration enumResult = context.search(
"DC=PORTAL,DC=COMPANY,DC=BE", "(CN=*)",
controls);
System.out.println(enumResult.hasMore());
context.close();
} catch (AuthenticationException e) {
System.out.println("Invalid credentials");
} catch (NamingException e) {
System.out.println("Lookup failed: " + e);
}
}AD的结构(在本地主机上使用AD-LDS)
DC=PORTAL,DC=COMPANY,DC=BE
->OU=Accounts
==>CN=John Doe
==>CN=Jane Doe
->CN=LostAndFound
->CN=NTDS配额
->CN=Roles
->OU=System账户
==>CN=PortalAdmin

将我的搜索基缩小到"OU=ACCOUNTS,DC=PORTAL,DC=COMPANY,DC=BE“会产生以下错误
查找失败: javax.naming.NameNotFoundException: LDAP:错误代码32 - 000020 8D: NameErr: DSID-031522C9,问题2001 (NO_OBJECT),数据0,最佳匹配:'DC=PORTAL,DC=COMPANY,DC=BE‘;剩余名称'OU=ACCOUNTS,DC=PORTAL,DC=COMPANY,DC=BE’
解决办法:
try {
DirContext ctx = new InitialDirContext(Environment.getEnvironment());
// Get all the attributes of named object
Attributes attrs = ctx
.getAttributes("cn=John Doe,ou=Accounts,DC=PORTAL,DC=COMPANY,DC=BE");
if (attrs == null) {
System.out.println("No attributes");
} else {
/* Print each attribute */
try {
for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) {
Attribute attr = (Attribute) ae.next();
System.out.println("attribute: " + attr.getID());
/* print each value */
for (NamingEnumeration e = attr.getAll(); e.hasMore(); System.out
.println("value: " + e.next()))
;
}
} catch (NamingException e) {
e.printStackTrace();
}
}
ctx.close();
} catch (AuthenticationException e) {
System.out.println("Invalid credentials");
} catch (NamingException e) {
System.out.println("Lookup failed: " + e);
}发布于 2012-03-14 14:33:39
从做一些基本的健康检查开始。例如,Environment.getEnvironment()返回的数据是正确的(url、端口、用户、密码),并允许连接到目录服务器。还要检查是否存在网络问题,并且您实际上可以访问服务器。
尝试限制搜索基数,例如:"OU=Accounts,DC=PORTAL,DC=COMPANY,DC=BE“,看看是否返回了一些结果。还要检查预期结果中的对象是否具有属性"cn“、"givenname”、"sn“、"mail”。
除此之外,在问题中显示的代码中没有明显的错误,它应该可以正常工作。
https://stackoverflow.com/questions/9702998
复制相似问题