gpt4 book ai didi

java - LDAP 查询中的 NamingEnumeration 不返回 null

转载 作者:行者123 更新时间:2023-12-01 12:51:52 24 4
gpt4 key购买 nike

我正在尝试根据从 Oracle 数据库获取的 userId 列表查询 ldap。如果帐户存在于 LDAP 中,我想更改给定对象的两个值。我遇到的问题是,由于某种原因,结果永远不会为空,因此我的代码总是尝试更改该值,即使 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);

}


}

最佳答案

返回类型是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
}
}

关于java - LDAP 查询中的 NamingEnumeration 不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com