Java eDirectory 使用电子邮件获取用户计数
Java eDirectory get user's count by using email
我想通过在 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。
我曾使用过 eDirectory,根据我的经验,我可以告诉您,我还没有遇到任何可以为您提供目录对象聚合(例如计数、总和、平均等)的函数。
您将需要依靠 Java 来计算搜索结果中 return 对象的数量。
例如,
int count = 0;
while (results.hasMoreElements()) {
count ++;
searchResult = (SearchResult) results.nextElement();
}
System.out.println("Total number of search results = " + count);
在您的示例中,我猜只有一个用户使用该电子邮件地址。因此,根据我的代码 count
将 return 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。
我曾使用过 eDirectory,根据我的经验,我可以告诉您,我还没有遇到任何可以为您提供目录对象聚合(例如计数、总和、平均等)的函数。
您将需要依靠 Java 来计算搜索结果中 return 对象的数量。
例如,
int count = 0;
while (results.hasMoreElements()) {
count ++;
searchResult = (SearchResult) results.nextElement();
}
System.out.println("Total number of search results = " + count);
在您的示例中,我猜只有一个用户使用该电子邮件地址。因此,根据我的代码 count
将 return 1. 如果您使用不同的条件进行搜索,例如通配符,您的结果可能会有所不同。
希望对您有所帮助!