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”
我可以用likeSearchControls.SUBTREE\u SCOPE
替换它吗?因为我不想使用硬编码值。您的工作目标不清楚。您是否正在尝试查找具有提供的电子邮件地址的用户数?