Apache Shiro 文档暗示了一些捕获连续失败登录尝试(以及其他)所需的功能,但是,我找不到具体的文档。目前我可以执行 currentUser.login(token); 使用无效 pw 无限次,并且不会捕获并抛出此错误。我正在努力寻找它在源代码中的实现位置。
这真的有效吗?shiro.ini 中是否配置了阈值?谁能指出我的文档(或确认它不存在)?
谢谢
环境细节:Shiro core 1.2.1 和 jdbc realm
开始文档 第 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 来表示特定的失败场景 //没有问题,按预期继续... End Documentaion