在 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 EE 中生成它们的问题 [重复]