首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用电子邮件获取用户计数的eDirectory

使用电子邮件获取用户计数的eDirectory
EN

Stack Overflow用户
提问于 2017-03-02 09:10:35
回答 1查看 610关注 0票数 1

我想通过在eDirectory中搜索电子邮件来获得数量。

为此,我将使用下面的代码

代码语言:javascript
运行
复制
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;
    }
}

但问题是,当我运行这个程序时,SearchResult只提供一个用户数据,而不是用户计数数。

所以请帮我解决这个问题。

我正在使用Java和eDirectory。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 09:15:54

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

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

例如,

代码语言:javascript
运行
复制
int count = 0;
while (results.hasMoreElements()) {
    count ++;
    searchResult = (SearchResult) results.nextElement();
}

System.out.println("Total number of search results = " + count);

在你的例子中,我想只有一个用户有那个电子邮件地址。因此,按照我的代码,count将返回1。如果您使用不同的标准进行搜索,例如一张外卡,您的结果可能会有所不同。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42551083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档