1

oracle11を使用してglasfish 3.1でJDBCRealmをセットアップしています。私の Web アプリ認証は正常に動作しますが、誰かが 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 で form-error-page を指定できると思います。

おそらく、表示したいページにユーザーをリダイレクトするサーブレットを指定できます。

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 に答える