【发布时间】:2012-06-27 05:39:09
【问题描述】:
由于我使用 Tomcat6 作为 servlet 容器运行 Java,我发现使用 Tomcat JNDIRealm feature 是合适的,这样 LDAP 用户无需任何额外的努力就可以登录到我的站点。我使用的 LDAP 服务器是OpenLDAP on Ubuntu。
除此之外,我的登录页面使用form-based authentication 而不是https connection。
我发现了两个非常好的通过 LDAP 验证用户的示例,here 和 here,它们都实现了我觉得我几乎实现的目标。为什么几乎实现了?
当我尝试使用错误的凭据登录时,我会适当地发送到<form-error-page>,就我而言是login-failed.html。
当我的凭据良好且身份验证成功时,我开始在站点中获得 403 for all urls。除非我重新启动 Tomcat,否则我无法删除 403 错误(即使是登录页面!)。
我怀疑原因是因为我没有正确设置领域中的roles 或其他配置文件。为简洁起见,我将相关配置文件摘录放在pastebin:
- Realm in Tomcat
server.xml - Relevant
tomcat-users.xmlpart - Relevant
web.xmlpart - Basic LDAP structure,破折号表示树形结构
请注意,基于 Tomcat 的身份验证可以完美运行,因为该角色很容易附加到 tomcat-users.xml 中的用户。因此,我认为一旦成功通过身份验证,从 LDAP 获取经过身份验证的用户的角色是一个问题。
TL/DR
我在将 Tomcat 连接到 LDAP 身份验证时遇到配置问题。正确获取了用户数据,但未正确获取用户的角色。可根据要求提供 LDAP 日志消息;)
更新:我粘贴了 LDAP 数据 here。
【问题讨论】:
-
您有群组 cn=site-users,ou=groups,dc=mydomain,dc=com 和该群组中的用户吗?
-
请提供更多有关您的 ldap 结构的信息
-
@MaVRoSCy 基本 LDAP 结构 here。因此我有
cn=site-users,ou=groups,dc=mydomain,dc=com。请注意,site-users有许多member属性指向用户。 -
谜题中还缺少其他东西......只是无法弄清楚是什么。我看到你的代码应该可以工作
-
@MaVRoSCy 请参阅下面我对用户 EJP 的最后评论。感谢您的帮助,会通知您。
标签: java tomcat ldap tomcat6 openldap