Java 忘记密码链接:如何验证链接?

Java 忘记密码链接:如何验证链接?,java,web-applications,spring-security,Java,Web Applications,Spring Security,可能重复: 我正在为一个web应用程序实现忘记密码。用户将收到一封带有网页链接的邮件,以输入新密码。我想限制链接的有效性,以最大24小时,因为它被创建。我应该如何实现这一点?我应该如何生成此参数,以便不重用同一链接,或者不能修改链接并重用它 不确定这是否有用,但我使用的是Spring 3.1框架。对于此类功能,您需要创建一个基于时间戳的随机令牌,并使用忘记密码链接发送它。您需要遵循以下提到的步骤 当用户点击忘记密码时创建一个随机令牌,并将其保存在数据库中,并注明到期时间 通过电子邮件将带有嵌入

可能重复:

我正在为一个web应用程序实现忘记密码。用户将收到一封带有网页链接的邮件,以输入新密码。我想限制链接的有效性,以最大24小时,因为它被创建。我应该如何实现这一点?我应该如何生成此参数,以便不重用同一链接,或者不能修改链接并重用它


不确定这是否有用,但我使用的是Spring 3.1框架。

对于此类功能,您需要创建一个基于时间戳的随机令牌,并使用忘记密码链接发送它。您需要遵循以下提到的步骤

  • 当用户点击忘记密码时创建一个随机令牌,并将其保存在数据库中,并注明到期时间
  • 通过电子邮件将带有嵌入令牌的链接发送给用户
  • 当用户点击链接时,首先检查令牌到期时间,如果令牌到期,可以向用户显示消息
  • 若令牌未过期,则允许用户更改密码,并可将令牌状态设置为无效

  • 为了确保更多安全,您可以创建更多步骤,以确保链接来自有效用户且未被黑客攻击。

    常用方法是在url中包含生成的id。该id将与创建日期或到期日期一起保存在db中。这样,您就可以创建一个后台任务来清除过期的ID。

    我要做的是:

    • 重置用户密码(随机值),过期日期为现在+24小时
    • 向用户发送带有“更改密码”页面链接的新密码
    优点:

    • Spring security将处理过期问题
    • 如果我“偷”到“更改密码”页面的链接,那就一文不值:用户需要输入当前密码和新密码(两次)
  • 一旦用户请求新密码,生成一些随机令牌,例如使用。将此令牌存储在与请求密码重置的用户ID关联的数据库中。还存储创建时的时间戳

  • 通过电子邮件向用户发送链接。此链接应包含您刚刚创建的作为URL一部分的令牌

  • 用户输入此链接后,将要求她输入新密码。如果您担心该链接可能已泄露,还可以询问一些个人详细信息(电子邮件、名字等)

  • 在服务器端,您可以:

  • 查找令牌和与该令牌关联的用户ID

  • 通过比较当前日期,确保令牌仍然有效

  • 将新密码散列存储