4

Apache Shiroのドキュメントは、(とりわけ)連続して失敗したログイン試行をトラップするためのいくつかの望ましい機能を暗示していますが、これに関する具体的なドキュメントは見つかりません。現在、currentUser.login(token);を実行できます。無効なpwが無限に発生し、このエラーをトラップしてスローしません。これがソースのどこに実装されているかを見つけるのに苦労しています。

これは実際に機能していますか?しきい値はshiro.iniで構成されていますか?誰かが私にこれに関するドキュメントを教えてもらえますか(またはそれが存在しないことを確認できますか)?

ありがとう

環境の詳細:Shiroコア1.2.1およびjdbcレルム

ドキュメントの開始ステップ3:成功または失敗の処理ログインメソッドが静かに戻ってきたら、それで終わりです。これで完了です。サブジェクトは認証されました。アプリケーションスレッドは中断することなく続行でき、SecurityUtils.getSubject()をさらに呼び出すと、認証されたサブジェクトインスタンスが返され、subject.isAuthenticated()を呼び出すとtrueが返されます。

しかし、ログインの試行が失敗した場合はどうなりますか?たとえば、エンドユーザーが間違ったパスワードを入力したり、システムに何度もアクセスしたりして、アカウントがロックされている場合はどうなりますか?

Shiroには、試行が失敗した理由を正確に示すことができる豊富なランタイムAuthenticationException階層があります。ログインをtry/catchブロックでラップし、必要な例外をキャッチして、それに応じて対応することができます。例えば:

try {
    currentUser.login(token);
} catch ( UnknownAccountException uae ) { ...
} catch ( IncorrectCredentialsException ice ) { ...
} catch ( LockedAccountException lae ) { ...
} catch ( **ExcessiveAttemptsException** eae ) { ...
} ... catch your own ...
} catch ( AuthenticationException ae ) {
    //unexpected error?
}

//No problems, continue on as expected...

既存の例外クラスの1つがニーズを満たさない場合は、特定の障害シナリオを表すカスタムAuthenticationExceptionsを作成できます//問題はありません。期待どおりに続行します...ドキュメントの終了

4

1 に答える 1

8

ExcessiveAttemptsExceptionをグーグルで検索した場合、2番目のリンク で、shiroの作者であるLesHazlewoodからの回答が見つかります。

とにかく、その例外は存在しますが、Shiroによってスロー/管理されることはありません。これは便利なものとして使用できるため、必要がない場合は独自のExceptionクラスを作成する必要はありません。必要に応じて、インスタンス化してレルムのdoGetAuthenticationInfoメソッドにスローする必要があります。Shiroがこれを自動的に実行できない理由は、このタイプのロジック(特定の分数で特定の回数後にアカウントをロックする)は通常、アプリケーションのユーザーデータモデルに完全に依存しているためです。

于 2013-02-11T21:13:11.590 に答える