LDAP查询中的NamingEnumeration不返回null

时间:2014-06-11 17:02:00

标签: java ldap

我正在尝试根据从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);

    }   


}

1 个答案:

答案 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
    }
}