gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:24:49 26 4
gpt4 key购买 nike

Apache Shiro 文档暗示了一些用于捕获连续失败登录尝试(以及其他)的所需功能,但是,我找不到具体的文档。目前我可以执行 currentUser.login(token);使用无效密码无限次并且不会捕获并抛出此错误。我正在努力寻找在源代码中实现的位置。

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

谢谢

环境细节:Shiro core 1.2.1 和 jdbc realm

开始文档
第 3 步:处理成功或失败
如果 login 方法安静地返回,就是这样——我们完成了!主体已通过身份验证。应用程序线程可以不间断地继续,所有对 SecurityUtils.getSubject() 的进一步调用将返回经过身份验证的 Subject 实例,对 subject.isAuthenticated() 的任何调用都将返回 true。

但是如果登录尝试失败会发生什么?例如,如果最终用户提供了错误的密码,或者访问系统的次数过多并且他们的帐户可能被锁定怎么办?

Shiro 拥有丰富的运行时 AuthenticationException 层次结构,可以准确指出尝试失败的原因。您可以将登录包装在 try/catch 块中并捕获您希望的任何异常并相应地对它们使用react。例如:

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 来表示特定的失败场景
//没问题,按预期继续...
结束文档

最佳答案

如果您只是在 second link 中搜索了 ExcessiveAttemptsException,你会从 shiro 的作者 Les Hazlewood 那里找到答案:

Anyway, that exception exists but it is not thrown/managed at any point by Shiro. It is there for your use as a convenience so you don't have to create your own Exception class if you don't want to. You would need to instantiate and throw it in your Realm's doGetAuthenticationInfo method when appropriate. The reason Shiro can't do this automatically is that this type of logic (lock account after a certain number of times in a certain number of minutes) is usually entirely dependent upon your application's User data model.

关于shiro - 如何配置 Apache Shiro 过多失败登录尝试的阈值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com