【问题标题】:Disable link after click sent through JavaMail单击通过 JavaMail 发送后禁用链接
【发布时间】:2016-01-13 16:02:57
【问题描述】:

我正在使用 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);

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

【问题讨论】:

  • 我从来没有见过这样内容的电子邮件...当我使用密码提醒时,服务器只允许使用一次链接,服务器对此负责。您是否看到包含此​​类内容的电子邮件?你确定吗?

标签: java hyperlink jakarta-mail


【解决方案1】:

如果我对您的理解正确,您希望允许用户单击一个链接以实现某些功能,然后使该链接失效,以确保它不能被重复用于执行其他更改。

我的建议是:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-12
      • 2017-05-31
      • 1970-01-01
      • 2013-06-02
      • 2011-09-23
      • 2012-10-05
      • 2015-03-03
      • 2012-03-26
      相关资源
      最近更新 更多