Java eDirectory获取用户';s使用电子邮件计数

Java eDirectory获取用户';s使用电子邮件计数,java,ldap,jndi,edirectory,Java,Ldap,Jndi,Edirectory,我想通过在eDirectory中搜索电子邮件来获取计数 为此,我使用下面的代码 import javax.naming.directory.DirContext; import javax.naming.directory.SearchResult; import java.util.Properties; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls;

我想通过在
eDirectory
中搜索电子邮件来获取计数

为此,我使用下面的代码

import javax.naming.directory.DirContext;
import javax.naming.directory.SearchResult;
import java.util.Properties;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.NamingEnumeration;

public class WebService {
    // Get number of count for email address
    DirContext ldapConn = openLDAPConn();
    SearchResult result = findByEmail(ldapConn, fillObj.getEmail());

    public DirContext openLDAPConn() {
        DirContext context = null;
        try {
            propFile = LoadProp.getProperties();

            Properties properties = new Properties();
            properties.put(Context.INITIAL_CONTEXT_FACTORY, propFile.getProperty(Constants.INITIAL_CONTEXT_FACTORY));
            properties.put(Context.PROVIDER_URL, propFile.getProperty(Constants.PROVIDER_URL));
            properties.put(Context.SECURITY_PROTOCOL, propFile.getProperty(Constants.SECURITY_PROTOCOL));
            properties.put(Context.SECURITY_PRINCIPAL, propFile.getProperty(Constants.SECURITY_PRINCIPAL));
            properties.put(Context.SECURITY_CREDENTIALS, propFile.getProperty(Constants.SECURITY_CREDENTIALS));

            context = new InitialDirContext(properties);
            debugOutput("Open LDAP Connection", propFile);
        } catch (Exception e) {
            debugOutput("Inside openLDAPConn Exception :" + e, propFile);
        }
        return context;
    }

    public SearchResult findByEmail(DirContext ctx, String email) {
        String ldapSearchBase = "ou=users,o=data";
        String searchFilter = "(&(objectClass=user)(mail=" + email + "))";
        SearchResult searchResult = null;
        try {
            SearchControls searchControls = new SearchControls();
            searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            NamingEnumeration<SearchResult> results = ctx.search(ldapSearchBase, searchFilter, searchControls);
            if (results.hasMoreElements()) {
                searchResult = (SearchResult) results.nextElement();
            }
        } catch (Exception e) {
        }

        return searchResult;
    }
}
import javax.naming.directory.DirContext;
导入javax.naming.directory.SearchResult;
导入java.util.Properties;
导入javax.naming.directory.InitialDirContext;
导入javax.naming.directory.SearchControls;
导入javax.naming.NamingEnumeration;
公共类Web服务{
//获取电子邮件地址的计数数
DirContext ldapConn=openLDAPConn();
SearchResult=findByEmail(ldapConn,fillObj.getEmail());
公共目录上下文openLDAPConn(){
DirContext=null;
试一试{
propFile=LoadProp.getProperties();
属性=新属性();
properties.put(Context.INITIAL\u Context\u FACTORY,propFile.getProperty(Constants.INITIAL\u Context\u FACTORY));
properties.put(Context.PROVIDER_URL,propFile.getProperty(Constants.PROVIDER_URL));
properties.put(Context.SECURITY_PROTOCOL,propFile.getProperty(Constants.SECURITY_PROTOCOL));
properties.put(Context.SECURITY\u PRINCIPAL,propFile.getProperty(Constants.SECURITY\u PRINCIPAL));
properties.put(Context.SECURITY\u凭据,propFile.getProperty(Constants.SECURITY\u凭据));
context=新的InitialDirContext(属性);
调试输出(“打开LDAP连接”,propFile);
}捕获(例外e){
debugOutput(“内部openLDAPConn异常:+e,propFile”);
}
返回上下文;
}
公共搜索结果findByEmail(DirContext ctx,字符串电子邮件){
字符串ldapSearchBase=“ou=users,o=data”;
字符串searchFilter=“(&(objectClass=user)(mail=“+email+”)”);
SearchResult SearchResult=null;
试一试{
SearchControls SearchControls=新的SearchControls();
searchControls.setSearchScope(searchControls.SUBTREE_范围);
NamingEnumeration results=ctx.search(ldapSearchBase、searchFilter、searchControls);
if(results.hasMoreElements()){
searchResult=(searchResult)results.nextElement();
}
}捕获(例外e){
}
返回搜索结果;
}
}
但问题是,当我运行这个时,
SearchResult
只给我一个用户数据,而不是用户的计数

所以请帮我解决它


我使用的是Java和eDirectory。

我使用过eDirectory,根据我的经验,我可以告诉您,我没有遇到任何函数可以为您提供目录对象的聚合,如count、sum、avg等

您需要依靠Java来计算搜索结果中返回的对象数

比如说,

int count = 0;
while (results.hasMoreElements()) {
    count ++;
    searchResult = (SearchResult) results.nextElement();
}

System.out.println("Total number of search results = " + count);
在您的示例中,我猜只有一个用户具有该电子邮件地址。因此,根据我的代码计算的
计数将返回1。如果使用不同的条件(例如通配符)进行搜索,结果可能会有所不同



希望这有帮助

在我的代码中,我使用的是
String ldapSearchBase=“ou=users,o=data”
我可以用like
SearchControls.SUBTREE\u SCOPE
替换它吗?因为我不想使用硬编码值。您的工作目标不清楚。您是否正在尝试查找具有提供的电子邮件地址的用户数?