我使用FORM身份验证。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/loginPage.jsp</form-login-page>
<form-error-page>/loginPage.jsp</form-error-page>
</form-login-config>
</login-config>
为了代码重用,我想为form-login-page和form-error-page使用相同的JSP。我使用了一个领域( org.apache.catalina.realm.JDBCRealm )。
在我的JSP中,如果身份验证失败,我想显示错误消息。 Realm是否在请求中存储了任何内容,我可以查看?
答案 0 :(得分:1)
将参数添加到错误页面的网址:
<form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/login.jsp?error=true</form-error-page> </form-login-config>
在您的login.jsp中,检查是否发生错误并显示错误消息:
<c:if test="${not empty error}"> <p class="error">Login failed. Please try again.</p> </c:if>
此表单不允许您输出登录失败的任何具体原因。但是,安全方面的考虑已经使这样做成为一种不好的做法,所以这应该不是问题。例如。您不应该想要输出详细消息,例如“没有用户注册该名称”。或“用户X的密码错误”,因为这有助于攻击者闯入系统。
告诉他们登录失败。简单而好的安全实践,您还想要什么? :)
答案 1 :(得分:0)
我已经通过将错误页面通过http标头重新定向到登录页面并使错误页面包含javascript来在错误下方的iframe中打开登录来完成此操作。