1

我想通过将电子邮件搜索到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;
    }
}

但问题是,当我运行它时,SearchResult只给我一个用户数据而不是用户数。

所以请帮我解决它。

我正在使用 Java 和 eDirectory。

4

1 回答 1

1

我使用过 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);

在您的示例中,我猜只有一个用户使用该电子邮件地址。因此,count根据我的代码将返回 1。如果您使用不同的条件(例如通配符)进行搜索,您的结果可能会有所不同。


希望这可以帮助!

于 2017-03-02T09:15:54.797 回答