由于我将Java与Tomcat6作为servlet容器一起运行,因此我发现使用Tomcat JNDIRealm功能是合适的,以便LDAP用户无需任何额外的努力即可登录到我的站点。我正在使用的LDAP服务器是Ubuntu上的OpenLDAP。
在此之上我使用的登录页面基于表单的认证过的https连接。
我在这里和这里找到了两个非常好的通过LDAP进行身份验证用户的示例,它们均实现了我几乎实现的目标。为什么 几乎 实现了?
当我尝试登录了错误的凭据,我适当地发送到<form-error-page>,login-failed.html在我的情况。
<form-error-page>
login-failed.html
如果我的凭据很好,并且我成功进行了身份验证 ,那么 对于该站点中的 所有URL ,我都会开始获得 403 。除非重新启动Tomcat,否则我无法删除403错误(甚至登录页面也无法!)。
我怀疑原因是因为我roles在领域或其他配置文件中未正确设置。为了简洁起见,我将相关的配置文件摘录放在pastebin上:
roles
server.xml
tomcat-users.xml
web.xml
请注意,基于Tomcat的身份验证可以完美地工作,因为该角色可以轻松地附加到中的用户tomcat- users.xml。因此,我相信一旦成功通过LDAP从LDAP获得已认证用户的角色是一个问题。
tomcat- users.xml
TL / DR
将Tomcat连接到LDAP身份验证时出现配置问题。正确获取了用户数据,但没有获取用户角色。LDAP日志消息可应要求提供;)
更新 :我在这里粘贴了LDAP数据。
那是正确的。JNDIRealm找不到您的LDAP角色。您需要在Tomcat外部测试角色搜索字符串,以确保它产生您认为应该产生的结果。由于您未提供任何LDAP详细信息,因此无法进一步评论。
使用/ *在整个站点上设置安全权限是一个错误。您需要排除登录页面,并且可能还要排除首页和忘记密码页面(可能更多),使其不再需要角色。