如何配置Apache Shiro过度失败登录尝试的阈值?

时间:2013-02-10 05:12:42

标签: shiro

Apache Shiro文档暗示了一些所需的功能,用于捕获连续失败的登录尝试(等等),但是,我找不到具体的文档。目前我可以执行currentUser.login(令牌);无效的pw无限次,并且不会陷阱并抛出此错误。我正在努力寻找在源中实现的地方。

这实际上有效吗?是否在shiro.ini中配置了阈值?有人能指出我的文件(或确认它不存在)?

由于

环境细节:Shiro核心1.2.1和jdbc领域

开始提供文档 第3步:处理成功或失败 如果登录方法安静地返回,那就是它 - 我们已经完成了!主题已经过身份验证。应用程序线程可以不间断地继续,对SecurityUtils.getSubject()的所有进一步调用将返回经过身份验证的Subject实例,对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...

如果其中一个现有异常类不满足您的需求,则可以创建自定义AuthenticationExceptions以表示特定的故障方案 //没问题,按预期继续...... 结束文件

1 个答案:

答案 0 :(得分:8)

如果您只是使用Google搜索ExcessiveAttemptsException,那么在second link中您可以找到来自Shiro的作者Les Hazlewood的答案:

  

无论如何,该异常存在,但它没有被抛出/管理   Shiro指出。它是为了您的方便使用   如果你不想,不必创建自己的Exception类。   您需要实例化并将其放入您的Realm中   适当时使用doGetAuthenticationInfo方法。四郎的原因   不能自动做这种类型的逻辑(锁定帐户   在一定数量的分钟后经过一定次数)   通常完全取决于您的应用程序的用户数据模型。