我希望制作一个javaEE应用程序,当用户在注册表格(姓名,邮件......)中插入数据后收到带有链接的电子邮件时,可以注册并确认他们的电子邮件
为此,我将使用java.util.UUID生成一个长且唯一的密钥,存储在数据库中,然后向该用户发送一封电子邮件,该密钥是URL的一部分(例如:www.mysite。 COM / account.xhtml?ID = KEY)。然后用户将单击该链接,我从URL中提取密钥并检查该密钥是否存储在DB中。如果是,则用户注册将完成。
我的问题是,在使用java.util.UUID创建该密钥时,我怎么知道它是一个唯一的密钥?我应该检查数据库中是否有另一个相同的密钥,如果是,那么在创建的密钥是唯一的之前创建一个新密钥?
答案 0 :(得分:2)
随机生成的128位整数与另一个随机生成的整数相等的可能性是什么?
如果您只需要高枕无忧,请使用主键,如果插入因密钥冲突而失败,请重新创建新的UUID并重试插入。
答案 1 :(得分:0)
有几种方法可以在Java中使用UUID。
Java 5以后更好的做法是使用java.util.UUID
它的字符串大小为36个字符。此链接为您提供了简单的example。
此讨论将为您提供answer to your question。它非常强大。我从未遇到过有人抱怨它的独特性。
但是,如果您添加到数据库或在存储中使用或通过网络使用,大小可能是重要的。因此转换为其他格式 - Bases是很好的解决方案(Base64,Base85等)。请查看此讨论here。您可以使用apache库org.apache.commons.codec.binary.Base64
。 Base85对于网址不安全。
我的建议是,如果您有应用程序/会话bean / Web服务(许多互连其他应用程序和数据传输等)正在创建UUID,我更喜欢做独特的应用程序名称填充。像APP1,APP2等,然后解码到其他基地。如果UUID是6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8,则APP1-6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8就是这样......
虽然它不在此主题,但是当您使用这样的www.mysite.com/account.xhtml?id=KEY
这样的URL时,请注意SQL注入黑客攻击。