2017-03-02 1 views
1

Ich möchte die Anzahl der Zähler erhalten, indem Sie die E-Mail in eDirectory suchen.Java eDirectory erhalten Benutzer zählen per E-Mail

Hierzu ich Code unten bin mit

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; 
    } 
} 

Aber das Problem ist, dass, wenn ich das laufen, mich SearchResult gibt nur ein Benutzer Daten nicht Anzahl der Zählung des Benutzers.

Also bitte helfen Sie mir, es zu lösen.

Ich verwende Java und eDirectory.

+0

Es ist nicht klar, was das Ziel Ihrer Bemühungen ist. Versuchen Sie, die Anzahl der Benutzer mit einer angegebenen E-Mail-Adresse zu finden? – jwilleke

Antwort

1

Ich habe mit eDirectory gearbeitet und aus meiner Erfahrung kann ich Ihnen sagen, dass ich nicht über jede Funktion gekommen sind, dass Sie ein Aggregat der Verzeichnisobjekte wie Zählung geben kann, sum, avg usw.

Sie werden Sie müssen sich auf Java verlassen, um die Anzahl der in Ihren Suchergebnissen zurückgegebenen Objekte zu berechnen.

Zum Beispiel

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

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

In Ihrem Beispiel, ich denke, es ist nur ein Benutzer mit dieser E-Mail-Adresse. Also, die count nach meinem Code wird 1. Wenn Sie mit einem anderen Kriterien, zum Beispiel eine Wildcard suchen, können Ihre Ergebnisse abweichen.


Hoffe, das hilft!

+0

In meinem Code verwende ich 'String ldapSearchBase =" ou = Benutzer, o = Daten ";' kann ich es ersetzen mit wie 'SearchControls.SUBTREE_SCOPE', weil ich nicht hardcoded Wert verwenden möchte. – user3441151

Verwandte Themen