2011-05-14 132 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()的第一个参数,那是唯一的名字。核实。

你意识到这个搜索将在你修复它时返回名下的整个子树?