单击通过 JavaMail 发送后禁用 link

Disable link after click sent through JavaMail

我正在使用 java 邮件和激活功能向用户发送电子邮件。当用户点击忘记密码时,将触发一封邮件到用户邮箱 link 以重置密码。

我不希望用户再次使用相同的 link,因此当他从电子邮件中单击 link 时...应该禁用 link..

我不知道该怎么做...

String body = "<a href='resetpage.jsp'>Reset Password</a>";
Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(email));
        message.setSubject("Password Reset");
                    MimeBodyPart mbp = new MimeBodyPart(); 
        mbp.setText(body, "UTF-8", "html");

                    Multipart multipart = new MimeMultipart();
                    multipart.addBodyPart(mbp);

                    message.setContent(multipart);

        Transport.send(message);

从这段代码中,我在电子邮件中收到 link..但是现在在用户单击电子邮件中的 link 后..应该禁用 link..或者我想确定..当用户再次点击相同的 link 时它应该不起作用..

您是否考虑过为此使用随机令牌? 此令牌可以包含在 link (reset.jsp?token=RANDOM) 每当用户被定向到重置页面时,它都可以读取给定的令牌并将其标记为已使用。

当再次使用使用过的令牌时,您可以将用户重定向到另一个页面(例如登录页面或错误页面)。

(我知道这可能不是您问题的完整答案,但我无法对您的问题添加评论。)

如果我对您的理解正确,您希望允许用户单击 link 以实现某些功能,然后使 link 无效以确保它不能被重新用于执行其他更改.

我的建议是:

  • 生成某种令牌 UUID.randomUUID().toString() 会很好用。
  • 将令牌存储在数据库中,并指明它的用途和功能(Joe Soap,密码重置)
  • 发送 URL 给用户,包括 ?token=[token_string_here]
  • 页面加载时检查令牌是否存在并显示您希望提供的功能。
  • 当代码对用户/帐户进行更改时,在执行操作之前再次检查令牌是否存在,然后从数据库中删除令牌