2013-02-10 124 views
4

Apache Shiro文档暗示了一些用于捕获连续失败登录尝试(除其他外)的所需功能,但是我找不到具体的文档。目前我可以执行currentUser.login(token);无效的无限次数,不会陷入并抛出这个错误。我正在努力寻找源代码在哪里实现。如何为Apache Shiro配置threashold过度失败登录尝试?

这是真的有用吗?是否在shiro.ini中配置了阈值?任何人都可以指向我的文档(或确认它不存在)?

感谢

环境细节:四郎核心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代表具体的故障场景 //没有问题,继续如预期... 完文件建立

回答

8

如果你只是简单地用Google搜索ExcessiveAttemptsException,在second link,你会发现从莱斯黑兹尔伍德,四郎笔者的答案:

无论如何,这存在例外,但我在Shiro的任何 点都不会抛出/管理。它可以作为一种便利使用,所以如果你不想创建自己的Exception类,你就不需要创建自己的Exception类。 您需要实例化并在适当的时候将其置于您领域的 doGetAuthenticationInfo方法中。 Shiro 无法自动执行此操作的原因是这种类型的逻辑(在特定的几分钟内锁定帐户 一定次数后)通常完全取决于您的应用程序的用户数据模型。