2011-05-14 50 views
0

首先,我是LDAP新手,使用LDAP進行編碼。我有一個簡單的問題,我試圖在LDAP中進行調試。我花了最後24小時看着我的代碼並搜索示例和配置。我有一個在JBoss上運行的Web應用程序。我創建了一個外部的Context bean,這樣我就可以在我的LDAP服務器的JNDI樹中查找連接。我正在建立一個沒有問題的連接。當我在LDAP服務器中搜索UID時,出現NameNotFoundException。來自LDAP的異常消息說:LDAP:錯誤代碼32 - 沒有這樣的對象。這讓我看看我的搜索條件。LDAP未從搜索中找到對象

以下是我有:

我使用LDAP瀏覽器連接到LDAP服務器。我正在使用LDAP瀏覽器中的搜索工具來驗證我的搜索條件。

SearchControls ctls = new SearchControls(); 
ctls. setReturningObjFlag (true); 
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
String filter = "(&(objectClass=*))"; 

InitialContext initCtx = new InitialContext(); 
LdapContext ldapCtx = (LdapContext) initCtx.lookup("ldapDataSource"); 

NamingEnumeration answer3 = ldapCtx.search("ou=People, ou=externalusers,  
              ou=EpicentricJNDIContext, 
              o=company.com", filter, ctls); 

我也已將對象類更改爲人,只是爲了確保。我仍然沒有得到結果。

我覺得我的代碼是正確的。我現在想知道用戶是否有正確的權限來完成搜索。另外,如何知道LDAP結構已正確設置,以便應用程序可以搜索LDAP?這是我的信仰,我們正在使用Netscape目錄服務器

我在這裏丟失什麼?看起來問題在我面前,我看不到它。任何建議或意見將不勝感激。

謝謝

我已經解決了我的問題。問題在於我如何綁定到LDAP服務器以及我如何創建DN。

SearchControls ctls = new SearchControls(); ctls. setReturningObjFlag (true);  
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); String filter = "(& (objectClass=inetOrgPerson))"; 
InitialContext initCtx = new InitialContext(); 
LdapContext ldapCtx = (LdapContext) 
initCtx.lookup("ldapDataSource"); 
NamingEnumeration answer3 = ldapCtx.search("ou=People, ou=externalusers,ou=EpicentricJNDIContext",filter,ctls); 
+0

不要在java中這樣做,但你確定「o = company.com」是不是「o = company,o = com」? – JPBlanc 2011-05-14 16:55:49

+1

或o = company,dc = com? – EJP 2011-05-15 22:55:13

回答

0

你不需要&在過濾器,除非你有多個條件是& -ed在一起。

這不是您的搜索條件。找不到的名字是search()的第一個參數,那是唯一的名字。覈實。

你意識到這個搜索將在你修復它時返回名下的整個子樹?