在Java EE 6中生成激活URL

7

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


你想知道如何创建必须随激活URL一起发送的“key”,还是你想在JSF中生成可书签的URL? - Nishant
用户注册后,会向其电子邮箱发送一个带有密钥的URL,如:点击 http://mysite.com/activate?key=dsafadsfwe 来激活您的账户。 - arg20
也许如果我能够从JSF访问URL并获取关键参数或其他内容。 - arg20
3
好的,我会尽力进行翻译。以下是需要翻译的内容:相关链接:https://dev59.com/M0_Sa4cB1Zd3GeqP-Tax - BalusC
2个回答

16

我曾经参与了一个需要用户确认邮件地址以激活其注册的项目。密钥生成过程如下:

密钥生成

  1. users表中创建一个列verification_key,用于保存用户的唯一验证密钥。
  2. 使用用户名称的唯一 SHA256哈希(在此情况下为电子邮件地址),并将盐设为其密码。
  3. 将哈希转换为base64,并存储在该用户的verification_key中。这将是唯一的(对于实际目的而言,我不会涉及碰撞的概率)。

因此,总之,key = Base64(Hash256(uniqueUserName + "." + password))

......

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

验证

  1. 由于我们知道verification_key是唯一的,因此从请求参数获取key并查找匹配行。
  2. 如果找到,将verification_key设置为null(这也将降低任何可能发生的冲突),并带用户进入“验证成功页面”。
  3. 如果没有找到,则将用户带到“已激活/密钥未找到/401页面”。

1
你好。非常感谢您提供的有用答案。我想从您的实现中了解更多信息。一旦用户被激活,您不应该每次他尝试执行某些操作时都进行检查,所以我是否应该有另一个表,比如“待处理用户”,这样如果用户在用户表中,我可以假设他已经被激活? - arg20
1
UUID.randomUUID() 可以用来生成一个随机数。 - Christophe Roussy

1

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

实现此服务的好选择包括执行用户激活/验证并重定向到JSF成功页面的Servlet。


我以前从来没有使用过JSF2的servlet,因为我从来没有真正需要它们。你能给我展示一些代码片段吗? - arg20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接