在 Java EE 6 中生成激活 URL

Posted

技术标签:

【中文标题】在 Java EE 6 中生成激活 URL【英文标题】:Generate activation urls in Java EE 6 【发布时间】:2011-06-19 18:09:47 【问题描述】:

我正在使用 Java EE 6 Web Profile 开发一个 Web 应用程序。我想通过电子邮件向新用户发送其帐户的激活链接。我应该如何实现这个?我正在使用 JSF2。是否有任何规范或推荐的方法来做到这一点?

【问题讨论】:

你想如何创建key 需要与激活 URL 一起发送,还是你想在 JSF 中生成书签 URL? 没错,用户注册后,一个带有密钥的 url 会发送到他的邮箱,例如:点击mysite.com/activate?key=dsafadsfwe 激活您的帐户。 如果我可以从 jsf 访问 url 并获取关键参数或其他东西 相关:***.com/questions/3295245/… 【参考方案1】:

我参与了一个项目,该项目要求用户确认他的电子邮件 ID 以激活他的注册。密钥生成过程是这样的:

密钥创建

    users 表中创建一个列verification_key,其中包含唯一用户的验证密钥。 使用您的 唯一 用户名(在本例中为电子邮件 ID)的 SHA256 哈希值和 salt 作为密码。 将哈希转换为base64 并存储在该用户的verification_key 中。这将是独一无二的(出于实际目的,我不会讨论碰撞的可能性)。

所以,底线,key = Base64(Hash256(uniqueUserName+"."+password))

......

旁注:顺便说一句,没有什么限制你使用密码作为盐。您可以随意创建一个任意字符串作为盐。

验证

    因为我们知道verification_key 是唯一的,所以从请求参数中获取key 并找到匹配的行。 如果找到,将verification_key 设置为null(如果有的话,这也将减少冲突的机会)并将用户带到“成功验证页面”。 如果未找到,则将用户带到“已激活/未找到密钥/401 页面”。

【讨论】:

嗨。这是一个非常有用的答案,非常感谢。我想从您的实施中再了解一件事。一旦用户被激活,你不应该每次他尝试做某事时再次检查,所以我应该有另一个表,说“pending_users”所以如果用户在用户表中,我可以假设他已经被激活? UUID.randomUUID() 可用于生成随机数【参考方案2】:

激活 URL 会让人联想到软件服务正在处理“服务”请求。

实现此服务的良好候选者包括 servlet,它将执行用户激活/验证并重定向到 JSF 成功页面

【讨论】:

我以前从未真正使用过带有 jsf2 的 servlet,因为我从来没有真正需要它们。请给我一些代码片段好吗?

以上是关于在 Java EE 6 中生成激活 URL的主要内容,如果未能解决你的问题,请参考以下文章

在java中生成6位pin

理解如何创建实体管理器或者我是不是可以在 JAVA EE 中生成它们的问题 [重复]

如何在java中生成6个不同的随机数

在 php 中生成唯一 id(用于 url 缩短器)

在 Windows 8 中生成地图应用程序的 URL [关闭]

在Java中生成一个随机字符串[关闭]