Authentication 使用ldap身份验证的Geronimo webapp

Authentication 使用ldap身份验证的Geronimo webapp,authentication,jakarta-ee,logout,geronimo,Authentication,Jakarta Ee,Logout,Geronimo,我使用ApacheGeronimo作为我的应用服务器。使用Apache目录服务通过LDAP进行身份验证。我以前没有任何JavaEE软件开发的经验,所以请对我放轻松。如果我需要更详细的解释,请告诉我 基本上,我的登录步骤与geronimo文档中的示例非常相似: 当用户尝试登录时,会发生三种不同的行为: 当用户使用正确的ldap组中的正确用户名登录时,他们将被带到站点的安全区域。我不知道在用户会话结束之前如何将其注销 当用户使用不在LDAP目录中的用户名/密码登录时,用户将被重定向到/auth/l

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

基本上,我的登录步骤与geronimo文档中的示例非常相似:

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

当用户使用正确的ldap组中的正确用户名登录时,他们将被带到站点的安全区域。我不知道在用户会话结束之前如何将其注销

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

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

在所有这些情况下,在重新启动浏览器或使用其他浏览器之前,用户无法重试登录过程。这是我面临的最大问题

我希望发生以下情况

经过正确身份验证的用户可以注销,然后再次尝试登录

身份验证不正确的用户将被重定向到登录屏幕,并被告知重试


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

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

我对我的应用程序做了一些修改,解决了这个问题。我正在发布我所做的事情,以防有人在谷歌遇到类似问题

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

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的身份验证。因此,经过身份验证的用户现在可以正确注销

对于三种情况:

如果用户能够正确登录,则用户单击指向EndSessionServlet的链接以注销 用户为ldap输入有效的用户名/密码,但不在正确的组中。该用户通常被发送到403页面,该页面现在使会话无效,并重定向到登录页面。 用户输入了无效的用户名/密码,并被发送到,同时设置为EndSessionServlet。这将结束会话,并将它们重定向到登录页面。 所以所有的场景现在都可以正常工作了