我正在使用Apache Geronimo作为我的应用服务器。并且使用Apache Directory Service在LDAP上进行身份验证。我以前没有任何JavaEE软件开发经验,所以请放轻松。如果我需要更详细地解释一下,请告诉我。
基本上我的登录步骤与geronimo文档中的此示例非常相似: https://cwiki.apache.org/GMOxDOC22/ldap-sample-app-ldap-sample-application.html
当用户尝试登录时,会发生三种不同的行为:
当用户使用正确的用户名(正确的ldap组)登录时,他们将被带到站点的安全区域。而且我不确定如何在会话结束之前将用户退出网站。
当用户使用不在LDAP目录中的用户名/密码登录时,用户将被重定向到/auth/logonError.html?param=test(此位置在'web中指定。 XML')
当用户使用不在相应组中的正确用户名/密码登录时,会将其重定向到“HTTP 403禁止页面”。在ldap示例的底部有一个此页面的示例。该行为应与未经身份验证的用户相同。
在所有这些情况下,在重新启动浏览器或使用其他浏览器之前,用户无法重试登录过程。这是我遇到的一个大问题。
我希望发生以下情况。
经过适当身份验证的用户可以退出,并尝试重新登录。
未经身份验证的用户会被重定向到登录屏幕,并被告知要再试一次。
我需要做些什么来实现这一目标?谢谢你的帮助。
答案 0 :(得分: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中的form-error-page:
<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验证。因此,经过身份验证的用户现在可以正常注销。
对于这三种情况:
所以所有场景现在都可以正常工作。