当前位置: 首页 > 面试题库 >

通过发送到电子邮件的动态URL实施Spring Security密码恢复的指南

邵骏喆
2023-03-14
问题内容

我发现密码恢复非常困难,因为我从未做过。

到目前为止,我已经拥有以下Web应用程序:

Spring Security,在其中正确地对密码进行了哈希处理,并实现了用户角色并正常工作。

该策略提示了来自stackoverflow的研究:

  1. 用户点击“忘记密码”按钮,然后在其中输入电子邮件地址。
  2. 动态链接已发送到电子邮件地址
  3. 用户打开电子邮件地址中的链接
  4. 这会将他重定向到密码重置页面

未知的:

  • 如何赋予链接动态本质-世代相传的方法
  • 链接超时-在此处发现了一些问题,但通常涉及自定义处理程序或Spring安全功能的扩展
  • 一种响应这种动态链接的请求映射方法
  • 临时链接存储方法-数据库,会话等。

如您所见,对于单个问题,该列表非常严格。因此,希望您能够提供有关逐步操作的指南资源。令我有些惊讶的是,我在Spring
Security文档中找不到太多关于此的内容。谢谢。

我是学生,所以真的不知道这样做的行业最佳实践,尤其是在Java的情况下,所以我真的希望任何人都能提供帮助。


问题答案:

这个问题实际上与Spring
Security无关。只要您知道用户数据库的结构和所使用的密码编码器,它实际上就是在实现涉及数据访问,Web控制器和发送电子邮件的工作流程。链接应包含随机令牌字符串(使用SecureRandom和base64编码器),并且应将其与userId和时间戳(用于验证链接在其中有效的窗口)一起存储在数据库中。控制器将简单地从传入请求中提取令牌,并使用令牌从数据库加载数据。它将检查时间戳,然后将用户转发到密码输入表单。根据要求,您可能还希望他们回答其他一些安全问题。然后,您将对密码进行验证和编码,然后将其存储在与存储在重置链接表中的userId匹配的帐户中。运行批处理作业以从数据库中删除过期的链接也很有意义。

Grails Spring Security UI插件已经具有“ 忘记密码”选项,您可以直接使用该密码或用作参考。



 类似资料:
  • 问题内容: 我正在使用。 使用发送电子邮件(通过)的最佳方法是什么? 问题答案: 有关使用Outlook的解决方案,请参见下面的TheoretiCAL答案。 否则,请使用python随附的smtplib。请注意,这将要求您的电子邮件帐户允许smtp,默认情况下不一定启用此功能。 编辑: 此示例使用保留域,如RFC2606中所述 为了使它真正与gmail配合使用,Doe先生需要进入gmail中的选项

  • 我使用的PHPMailer表格在这里找到。 从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。 在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码: 任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!

  • 问题内容: 在我的中,我具有以下内容: 我的电子邮件代码: 当然,如果通过设置调试服务器,则可以在终端中看到该电子邮件。 但是,我实际上如何不将电子邮件发送到调试服务器,而是发送到user@gmail.com? 阅读你的答案后,让我弄明白一点: 你不能使用localhost(简单的ubuntu pc)发送电子邮件吗? 我认为在django 1.3中已经过时了,取而代之的是? 问题答案: 将电子邮件

  • 我使用SendInBlue Java Api发送电子邮件,我在scala中编写了以下代码: 但我得到了这个错误:{“代码”:“失败”,“消息”:“需要有效的”至“电子邮件地址”,“数据”:[]}

  • 问题内容: 我知道有一些与此类似的问题,但我无法使其正常运行。 好的,我在一个名为$ emailList的变量中有一个从数据库中获取的电子邮件列表。如果将变量放在该部分中,则可以获取代码以从表单发送电子邮件,但无法使其与bcc一起使用。我什至还添加了一封电子邮件,以防万一,但这没什么关系。 这是我的代码。 我试过两个代码: 和 不是因为这些电子邮件而没有分开电子邮件。我知道他们是因为如果我在本节中

  • 下面是错误和超时异常。 输入代码: 调试SMTP:正在尝试连接到主机“SMTP.gmail.com”,端口587,isSSL true Exceptioninthread“main”java。lang.RuntimeException:com。太阳邮政util。MailConnectException:无法连接到主机,端口:smtp。gmail。com,587;超时-1。