点击通过JavaMail

时间:2016-01-12 09:30:11

标签: java hyperlink javamail

我正在使用java邮件和激活来向用户发送电子邮件。当用户单击忘记密码时,将触发用户电子邮件的邮件,其中包含用于重置密码的链接。

我不希望用户再次使用相同的链接,所以当他点击电子邮件中的链接时...链接应该被禁用..

我不知道怎么做......

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);

从这段代码中,我收到了电子邮件中的链接..但现在用户点击电子邮件中的链接后...链接应该被禁用..或者我想确保..当用户再次点击相同的链接时不应该工作..

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

如果我理解正确,您希望用户能够点击将实现某些功能的链接,然后使链接无效,以确保无法重复使用该链接进行其他更改。

我建议的是:

  • 生成某种类型的令牌UUID.randomUUID()。toString()可以很好地工作。
  • 将令牌存储在数据库中,以指示其用途以及允许的功能(Joe Soap,密码重置)
  • 向用户发送包含?token = [token_string_here]
  • 的URL
  • 当页面加载检查时,令牌存在并显示您希望提供的功能。
  • 当代码对用户/帐户进行更改时,请在执行操作之前检查该令牌是否存在,然后从数据库中删除该令牌