用于高级用户帐户保护的Java库

用于高级用户帐户保护的Java库,java,security,web-applications,frameworks,jakarta-ee,Java,Security,Web Applications,Frameworks,Jakarta Ee,我正在寻找图书馆提供先进的用户帐户保护的web应用程序。我需要以下功能: 1) 在定义的时间范围内多次登录尝试失败后锁定用户帐户。 2) 密码在N天内过期。 3) 每个用户的密码历史记录跟踪 是否有适当的解决方案满足所有或部分需求 提前谢谢 您可以使用& 1) 在定义的时间范围内多次登录尝试失败后锁定用户帐户 您可以使用Spring安全性并计算失败尝试的次数,并且bock用户为文章 常见问题#3:在多次登录失败后,如何禁用用户? 一个常见的用户需求是在多次登录尝试失败后禁用/锁定帐户。Acegi

我正在寻找图书馆提供先进的用户帐户保护的web应用程序。我需要以下功能:

1) 在定义的时间范围内多次登录尝试失败后锁定用户帐户。
2) 密码在N天内过期。
3) 每个用户的密码历史记录跟踪

是否有适当的解决方案满足所有或部分需求


提前谢谢

您可以使用&

1) 在定义的时间范围内多次登录尝试失败后锁定用户帐户

您可以使用Spring安全性并计算失败尝试的次数,并且bock用户为文章

常见问题#3:在多次登录失败后,如何禁用用户? 一个常见的用户需求是在多次登录尝试失败后禁用/锁定帐户。Acegi本身不提供任何“开箱即用”的功能,但是您可以在应用程序中实现并注册org.springframework.context.ApplicationListener。在应用程序事件侦听器中,您可以检查特定AuthenticationFailureEvent的实例,然后调用应用程序用户管理界面来更新用户详细信息

例如:

 public void onApplicationEvent(ApplicationEvent event) {

   // check failed event
   if(event instanceof AuthenticationFailurePasswordEvent){
      // call user management interface to increment failed login attempts, etc.
      . . .
   }
 }
2) 密码在N天内过期

您可以使用重置密码来安排任务。您还可以在DB中设置ExpiryDate字段,并可以每天在0000小时触发触发器并执行这些操作

3) 每个用户的密码历史记录跟踪

使用DB,您可以获取所用密码的历史记录,并且可以轻松地使用


顺便说一句,如果你找到任何专门用于此功能的框架(lee me know:)

我不知道有任何框架提供这些功能,但我也不确定是否会费心去寻找。它们是非常简单的需求,很容易自己编写代码,可能比学习新框架所需的时间要短。然后避免对框架的依赖


对于与安全性相关的更复杂的需求,我建议。

我认为,如果不需要外部库,您的需求就不太复杂

  • 您可以将失败登录尝试的次数存储在数据库中客户端用户的一列中,如果在预定的时间段内找到,则可以在运行时增量期间存储
  • 另一列可以保留密码的修改日期,因此您可以在运行时检查尝试登录是否超过该天数
  • 这是一个棘手的问题,因为通常情况下,密码存储为某种类型的散列,而之前保存历史值没有多大意义

  • 您可以使用像Shiro这样的轻量级安全框架,但我怀疑任何库都不能满足这些特定需求。你必须在上面写下你的逻辑。你对第二个要求的建议有点复杂。向用户表中添加时间戳列要容易得多,即User.passwordExpiryTimestamp.Thank,但我的意思是根本不需要计划作业。每次UserDetailsService查询用户时,它将expiryTimestamp与当前时间进行比较,并相应地设置UserDetails.CredentialsNoneExpired标志。@Kevin我认为job+到期日期将是一个不错的选择。密码历史记录跟踪的原因是,在密码到期后,用户不能使用与前一个密码相同的密码(或N个前一个密码中的一个)。换句话说,用户不应该能够重复使用他的旧密码。在这种情况下,您必须创建一个单独的DB表,将用户(一列)与密码哈希(另一列)关联起来。因此,您将能够为一个用户(相同的用户密钥id)拥有多行及其所有密码。创建一个日期列也很好。