我正在尝试设置 LDAP LoginModule(使用 BrowserLdapLoginModule )。用户/密码正确;它从用户那里检索角色,但是当它尝试提取 CN 值时,它找不到这些值。
我遵循了该过程,最终失败的是我在以下行中得到了 javax.naming.NameNotFoundException
NamingEnumeration roleAnswer = ctx.search(searchBaseDN, roleFilter, roleconstraints);
具有以下值(不包括双引号):
- searchBaseDN(String) = "OU=Roles,DC=siafake,DC=aplssib"
- roleFilter(String) = "(distinguishedName=CN=Urgencias,OU=Roles,DC=siafake,DC=aplssib)"
- derefRoleAttribute(String[] = { "cn"};
有了这些数据,我希望搜索返回 Urgencias
,但我只得到了异常(exception)。这不是权限问题,因为使用相同的用户/密码我可以毫无问题地浏览 LDAP 树。
有什么想法/建议吗?提前致谢。
最佳答案
好的,这是我找到的答案(还有对 Terry Gardner 评论的一些澄清)
我的系统管理员给了我用户 A(“系统”用户,可以连接和浏览 LDAP)。将连接到我的应用程序的用户是用户 F(最终用户)。当询问有关配置我的 jboss 的示例时,他们将我重定向到 BrowserLdapModuleLogin (BLML)。
事实证明,BLML 的工作原理是与用户 A 进行初始连接,以检索用户 F 数据(完整的 LDAP“名称”)。
之后,使用用户 F 连接数据设置新连接来验证用户/密码并检索其所属的组(memberOf
属性)。到目前为止,一切都按预期进行(至少在我们的设置中)。
当我设置仅获取“CN”值(而不是 CN=value,OU=organization....
)的选项时,问题就开始了。通过设置此选项,模块会再次尝试以用户 F 身份登录角色树以获取属性。但碰巧F没有权限这样做。
由于该模块是由我们的 IT 人员提供的,而我是 LDAP 的新手,我以为我只是设置了一些错误,并且我不想更改代码中的任何内容。最后,碰巧在使用它的系统中,这个模块仅用于身份验证;这些角色是从另一个数据库中提取的,我被迫围绕这个问题进行编码。
抱歉给您带来麻烦了...
关于java - 使用搜索检索 LDAP 信息时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10635700/