如何为 Apache Shiro 过多的登录尝试失败配置阈值?
Posted
技术标签:
【中文标题】如何为 Apache Shiro 过多的登录尝试失败配置阈值?【英文标题】:How configure threashold for Apache Shiro Excessive Failed Login Attempts? 【发布时间】:2013-01-25 12:55:30 【问题描述】:Apache Shiro 文档暗示了一些用于捕获连续失败的登录尝试(以及其他)的所需功能,但是,我找不到具体的文档。目前我可以执行 currentUser.login(token);使用无效 pw 无限次,并且不会捕获并抛出此错误。我正在努力寻找它在源代码中的实现位置。
这真的有效吗? shiro.ini 中是否配置了阈值?谁能指出我的文档(或确认它不存在)?
谢谢
环境详情:Shiro core 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】:如果您只是在 Google 上搜索 ExcessiveAttemptsException,在 second link 中您会从 shiro 的作者 Les Hazlewood 那里找到答案:
无论如何,该异常存在,但它不会被抛出/管理 由 Shiro 指出。它是为了方便您使用,所以您 如果您不想,不必创建自己的 Exception 类。 您需要实例化并将其放入您的领域 适当时使用 doGetAuthenticationInfo 方法。四郎的理由 不能自动执行此操作是这种类型的逻辑(锁定帐户 在一定分钟数内一定次数后)是 通常完全取决于您的应用程序的用户数据模型。
【讨论】:
以上是关于如何为 Apache Shiro 过多的登录尝试失败配置阈值?的主要内容,如果未能解决你的问题,请参考以下文章