2011-11-25 190 views
0

我有一段Java代碼可以簡單搜索Active Directory。代碼的功能如預期的那樣在使用生產AD時使用,但是當在測試AD上使用相同的代碼時,不會返回任何結果(也不會引發異常或錯誤)。LDAP不返回任何結果

在我的機器上使用AD瀏覽器時,我可以瀏覽和搜索測試AD並查找我正在查找的結果。

AD允許讀取所有人的權限,因此它不是權限問題。

有誰知道什麼可能導致它不會返回任何結果到我的Java客戶端,但對我的瀏覽器呢?

Java代碼:

 Hashtable env = new Hashtable(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, Constants.LDAPURL); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.REFERRAL, "follow"); 
     DirContext dctx = new InitialDirContext(env); 

     String base = Constants.LDAPQUERYLOCATION; 

     SearchControls sc = new SearchControls(); 
     String[] attributeFilter = {"cn", "sAMAccountName", "sn", "distinguishedName"}; 
     sc.setReturningAttributes(attributeFilter); 
     sc.setSearchScope(SearchControls.SUBTREE_SCOPE); 

     String filter = "(&(objectClass=User)(sn=smith))"; 
     NamingEnumeration results = dctx.search(base, filter, sc); 
     if(!results.hasMore()){ 
      log.debug("No results found"); 
     } 
     while (results.hasMore()) { 
      SearchResult sr = (SearchResult) results.next(); 
      Attributes attrs = sr.getAttributes(); 
      Attribute attr = attrs.get("cn"); 
      log.debug("cn: "+attr.get()); 
      attr = attrs.get("sn"); 
      log.debug("sn: "+attr.get()); 
      attr = attrs.get("distinguishedName"); 
      log.debug("dn: "+attr.get()); 
     } 
     dctx.close(); 

我沒有AD的控制,所以我真的不能提供有關其設置的許多信息。

+0

您可以在測試和生產中提供以下參數:Constants.LDAPURL和Constants.LDAPQUERYLOCATION嗎? – JPBlanc

回答

0

只是想盡自己的網絡,該網絡使用的OpenLDAP您的代碼 - 這是我所知道的是不一樣的AD,

我沒有結果要麼直到我改變了我的filter串到這一點:

String filter = "(&(objectClass=inetOrgPerson)(sn=smith))"; 

我通過使用LDAP瀏覽器窺探到目錄中,得到了inetOrgPerson對象類。這是一個很長的過程,但是您的測試AD可能沒有使用與您的生產服務器相同的對象類?

快速Google向我展示了微軟的implementation of the LDAP standard was lacking at first, but should now be (more) compliant使用inetOrgPerson--也許你的測試AD運行的是舊版本的問題,而你的prod box是最新最好的?或者反之亦然?

+0

我認爲,但都使用相同的ObjectClass – AverageMarcus

+0

他們是否在相同版本的操作系統上運行相同版本的AD? – millhouse

+0

據我所知,是的。 – AverageMarcus