0

我使用 Apache Geronimo 作为我的应用程序服务器。并且使用 Apache 目录服务通过 LDAP 进行身份验证。我以前没有任何 JavaEE 软件开发经验,所以请放轻松。如果我需要更详细地解释任何事情,请告诉我。

基本上我的登录步骤与 geronimo 文档中的这个示例非常相似: https ://cwiki.apache.org/GMOxDOC22/ldap-sample-app-ldap-sample-application.html

用户尝试登录时会发生三种不同的行为:

  1. 当用户使用正确的用户名(在正确的 ldap 组中)登录时,他们会被带到站点的安全区域。而且在会话结束之前,我不确定如何将用户从站点中注销。

  2. 当用户使用不在 LDAP 目录中的用户名/密码登录时,用户将被重定向到 /auth/logonError.html?param=test(此位置在 'web.xml' 中指定)

  3. 当用户使用不在适当组中的正确用户名/密码登录时,他们将被重定向到“HTTP 403 禁止页面”。在 ldap 示例的底部有一个此页面的示例。该行为应该与未经身份验证的用户相同。

在所有这些情况下,用户无法重试登录过程,直到重新启动浏览器或使用不同的浏览器。这是我遇到的大问题。

我希望发生以下情况。

  1. 正确验证的用户可以注销,然后尝试再次登录。

  2. 未正确验证的用户被重定向到登录屏幕,并被告知重试。

我需要做什么才能做到这一点?谢谢你的帮助。

4

1 回答 1

0

这不是经常发生。你遇到一个问题,挣扎了几天,最后把它发布到 StackOverflow(或任何地方),然后你相对容易地解决了这个问题。

我对我的应用程序进行了一些更改以解决问题。我正在发布我所做的事情,以防有人偶然从谷歌遇到类似问题。

首先,我创建了一个 servlet(称为 EndSessionServlet),它就是这样做的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    endSession(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    endSession(request, response);
}

private void endSession(HttpServletRequest request, HttpServletResponse response) throws IOException{
    request.getSession().invalidate();
    response.sendRedirect(".");
}

然后我将它添加到我的 web.xml 文件中:

<error-page>
 <error-code>403</error-code>
 <location>/EndSessionServlet</location>
</error-page>

我还更改了 web.xml 中的表单错误页面:

<login-config>
<auth-method>FORM</auth-method>
<realm-name>This is not used for FORM login</realm-name>
<form-login-config>
  <form-login-page>/login.jsp</form-login-page>
  <form-error-page>/EndSessionServlet</form-error-page>
</form-login-config>
</login-config>

我在已通过 EndSessionServlet 验证的网页部分添加了一个链接。因此,经过身份验证的用户现在可以正确注销。

对于三种场景:

  1. 用户能够正常登录,用户单击 EndSessionServlet 的链接注销
  2. 用户为 ldap 输入了有效的用户名/密码,但不在正确的组中。该用户被正常发送到 403 页面,现在会话无效,并重定向到登录页面。
  3. 用户输入了无效的用户名/密码并被发送到也设置为 EndSessionServlet 的。这将结束会话,并将它们重定向到登录页面。

所以现在所有的场景都可以正常工作。

于 2010-07-27T14:49:25.137 回答