1

我在带有 oracle11 的 glasfish 3.1 中有一个 JDBCRealm 设置。我的网络应用程序身份验证工作正常,但现在我希望能够在有人连续 3 次登录失败时做出反应。查看我的服务器日志,我可以看到每次登录失败时都会记录一个异常:

WARNING: WEB9102: Web Login Failed:
com.sun.enterprise.security.auth.login.common.LoginException: 
Login failed: Security Exception

你们知道在我的java代码中以编程方式捕获它的任何方法吗?我尝试用谷歌搜索它,但无济于事。

或者,也许您完全知道更好的解决方案?请分享。

谢谢,达摩

更新:我需要重新表述问题(或正确解释情况)。每次身份验证失败时,我都想将其记录在我的数据库中。为此,我需要用户名、时间戳等。每次身份验证失败时,系统都会检查失败次数,如果超过 3 次,它将锁定用户的帐户。所以,我可以在我的 loginerror.jsp 中执行此操作,但我需要用户名。在任何地方都找不到它:)。到目前为止,我尝试了一个过滤器,但您似乎无法在 j_security_check url-patter 上进行过滤(至少在 glassfish 3.1 中没有)。所以实际上,这里的主要问题是获取传递给 loginerror.jsp 的登录失败的人的用户名(以任何形式:属性、参数等)。会去尝试一些java脚本和表单提交..呵呵。谢谢。

4

2 回答 2

1

只有当您将登录信息掌握在手中时,您才能抓住它。您需要提交j_security_check到使用HttpServletRequest#login().

try {
    request.login(username, password);
} catch (ServletException e) {
    // Handle.
}
于 2011-04-01T13:40:52.643 回答
1

我认为您可以在 web.xml 中指定表单错误页面。

您可能可以在那里指定一个 servlet,将用户重定向到您要显示的页面。

http://download.oracle.com/docs/cd/E19798-01/821-1841/bncas/index.html#6nmq2cpkm

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>file</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/error.xhtml</form-error-page>
    </form-login-config>
</login-config>
于 2011-04-01T13:48:26.773 回答