我正在尝试根据从Oracle数据库获取的userIds列表查询ldap。如果帐户存在于LDAP中,我想要更改给定对象的两个值。我遇到的问题是由于某种原因结果永远不会为null,所以我的代码总是尝试更改值,即使LDAP上不存在用户。您会看到我为测试目的打印了“结果”的值。结果的输出是:
com.sun.jndi.ldap.LdapSearchEnumeration@3a747fa2
“@”之后的所有内容都是每个查询的随机值。有什么我做错了吗?
这是我的代码:
public void queryLdap(String netId, LdapContext context)
{
String uId = "(uid=" + netId + ")";
String userDn="uid=" + netId + "," + domainRoot;
try{
SearchResult searchResult = null;
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = {"pdsAccountStatus", "inetUserStatus"};
//controls.setReturningAttributes(attrIDs);
NamingEnumeration<SearchResult> result = context.search(domainRoot, uId, controls);
System.out.println(result);
if(result != null){
changeLdap(userDn);
}
}
catch(Exception ex){
System.out.println("NamingEnumeration Error in queryLdap: " + ex);
}
}
答案 0 :(得分:1)
返回类型是NamingEnumeration<SearchResult>
,它永远不会为空。
您需要更改结果检查以使用NamingEnumeration可用的方法:
if ( result.hasMore() )
{
changeLdap( userDn );
}
但是使用while
循环实际使用结果会更好,但这取决于您的用例:
while ( result.hasMore() )
{
try {
SearchResult res = result.next();
String objDn = res.getNameInNamespace();
// Use the Dn of the returned object
} catch (NamingException e) {
// Whatever
}
}