2016-03-21 13 views
2

Şu anda bir şirkette bazı kütüphane tarama yazılımlarını sürdürüyorum ve (Lisedeyim) için bir koopedayım. Bir "CN" değeri döndürmek için tarayıcıdan LDAP aramasına bir çalışanID değeri geçirebilmem gerekir.LDAP Sorgusu Java'dan Yavaş Yanıt Özniteliğine Erişme (çalışan kimliği)

Ne yazık ki, Java programında döndürülen hiçbir sonuç almıyorum. Windows'da Active Directory programını kullanarak arama yapabildiğim, ancak çalışan kimliğinden herhangi bir sonuç görüntülemek için 6 ila 10 saniye sürüyor. Sorguda çok büyük bir zaman aşımı sınırı kullanarak bu sorunu çözmeye çalıştım, ama bence yanlış bir şey yapmalıyım.

Veritabanı deneyimine sahip olan herhangi bir fikir var mı?

try 
    { 
     System.out.println("Début du test Active Directory"); 

     Hashtable<String, String> env = new Hashtable<String, String>(11); 
     env.put(INSERT CREDENTIALS HERE); 
     env.put("com.sun.jndi.ldap.timeout", "80000"); 
     env.put(Context.SECURITY_PROTOCOL, "ssl"); 
     env.put(Context.SECURITY_PROTOCOL, "simple"); 
     ldapContext = new InitialDirContext(env); 

     // Create the search controls   
     SearchControls searchCtls = new SearchControls(); 

     //Specify the attributes to return 
     String returnedAtts[]={"cn","givenName", "samAccountName"}; 
     searchCtls.setReturningAttributes(returnedAtts); 

     //Specify the search scope 
     searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

     //specify the LDAP search filter 
     id = "********"; 
     String searchFilter = "(&(employeeID="+id+"))"; 

     //Specify the Base for the search 
     String searchBase = "dc=ericsson,dc=se"; 
     //initialize counter to total the results 
     SearchResult sr = null; 
     int totalResults = 0; 
     NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls); 
     // Search for objects using the filter 
     while (totalResults == 0){ 
      answer = ldapContext.search(searchBase, searchFilter, searchCtls); 
      System.out.println("Total results: " + totalResults); 

      while (answer.hasMoreElements()) 
      { 
      sr = answer.next(); 
      System.out.println(sr); 
      totalResults++; 
      System.out.println(">>>" + sr.getName()); 
      Attributes attrs = sr.getAttributes(); 
      cn = (">>>>>>>>>" + attrs.get("cn")); 
      signum = cn.substring(13,20); 
      System.out.println("Total results: " + totalResults); 
      } 
     } 
     //Loop through the search results 

cevap

0

Sen employeeID nitelik endeksli olduğundan emin olmanız gerekir.

Ayrıca filtrenizi daha da geliştirmeniz gerekir. Kullanıcılar için kullandığınız nesne sınıfına en az objectClass filtre ekleyebilirim.

+0

Bu konuda oldukça yeni biriyim. Çalışan kimliğinin endekslendiğinden nasıl emin olabilirim? Komut satırında test mi yapıyorsun? – onines7