当前位置: 首页 > 知识库问答 >
问题:

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

西门庆
2023-03-14

ApacheShiro文档暗示了捕获连续失败的登录尝试(以及其他)所需的一些功能,但是,我找不到具体的文档。目前我可以执行currentUser。登录(令牌);使用无效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...

如果现有的异常类之一不能满足您的需求,可以创建自定义身份验证异常来表示特定的故障场景//没有问题,按照预期继续...结束文档

共有1个答案

翟修明
2023-03-14

如果你只是在谷歌上搜索ExcessiveAttemptsException,那么在第二个链接中,你会从《shiro:

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

 类似资料:
  • 我有以下登录系统,跟踪youtube上的mmtuts,我正在尝试添加登录失败尝试系统。 如果用户已登录5次但失败,则至少10分钟内无法再登录,但我发现很难修改他的代码。 。我有一种感觉,那可能是他拥有if($ROW=mysqli_fetch_assoc($result){};的行 这是否意味着$ROW是否存在?他不是应该在这里做一个num_row吗?每当我试图修改他的代码时,login.php页面

  • 我开始阅读Unraveling AngularJS1.5以学习与Angular相关的知识,在本书的开头,作者最喜欢安装node,我做了这件事,当我在cmd上运行node时,它显示我已经安装了node,然后他说要转到第01章,我用cd命令完成了这件事,并编写npm install来安装package.json在这一步中,我得到了如下警告: npm WARN package.json unraveli

  • 问题内容: 我无法摆脱这个错误。我已经通过SSMS添加了“ NT AUTHORITY \ NETWORK”用户以及使用此线程作为参考的相关角色:用户“ NT AUTHORITY \ NETWORKSERVICE”的登录失败 我试图通过Windows服务建立数据库连接。在调试模式下,数据库连接可以正常工作。当我实际尝试运行已安装的服务时,便会出现此错误。 这是我来自app.config的连接字符串:

  • 所以阅读Sybase的实用手册,我发现我可以设置我的 localhost服务器使用dsedit.exe.。 然后我尝试在Aqua Data Studio中注册我的localhost服务器,方法如下: 但是我得到了以下错误: 管理员用户名是什么 我在哪里/如何设置它?? 根据文档,它说默认的系统管理员ID是“sa”,没有密码。。 (http://infocenter.sybase.com/archi

  • 问题内容: 我试图测试与本地sql DB的连接。我有这个代码: 我尝试了很多用户。我的Windows用户是SOSCOMP,没有密码。我也知道SQL 2008将用户创建为“ sys”“ dbo”,我也尝试过这些。我总是得到: 有任何想法吗? 谢谢 问题答案: 如果尝试连接使用Windows身份验证的数据库,则可以在连接字符串中使用“ integratedSecurity”选项。

  • “通过”测试但配置失败的示例。 配置失败:@afterclass tearDown java.lang.assertionerror:java.lang.assertionerror:应为[true],但在org.testng.assert.fail(assert.java:96)在links.testarea.tearDown(Testarea.java:96)在sun.reflect.nati