2017-03-02 98 views
1

我想通過搜索電子郵件到eDirectory來獲取計數數量。Java 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。

+0

目前尚不清楚您的努力目標是什麼。您是否嘗試查找提供電子郵件地址的用戶數量? – jwilleke

回答

1

我與eDirectory的工作,從我的經驗,我可以告訴你,我還沒有碰到過,可以給你喜歡的計數,總和,平均目錄對象的集合的任何功能來等

你會需要依靠Java來計算搜索結果中返回的對象的數量。

例如,

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

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

在你的榜樣,我想只有一個與該電子郵件地址的用戶。因此,根據我的代碼,count將返回1.如果您使用不同的條件進行搜索,例如通配符,則結果可能會有所不同。


希望這有助於!

+0

在我的代碼中,我使用'String ldapSearchBase =「ou = users,o = data」;'我可以用'SearchControls.SUBTREE_SCOPE'來代替它,因爲我不想使用硬編碼值。 – user3441151

相關問題