JavaEE应用程序使用java.util.UUID创建唯一键

时间:2015-06-01 23:09:24

标签: java java-ee key

我希望制作一个javaEE应用程序,当用户在注册表格(姓名,邮件......)中插入数据后收到带有链接的电子邮件时,可以注册并确认他们的电子邮件

为此,我将使用java.util.UUID生成一个长且唯一的密钥,存储在数据库中,然后向该用户发送一封电子邮件,该密钥是URL的一部分(例如:www.mysite。 COM / account.xhtml?ID = KEY)。然后用户将单击该链接,我从URL中提取密钥并检查该密钥是否存储在DB中。如果是,则用户注册将完成。

我的问题是,在使用java.util.UUID创建该密钥时,我怎么知道它是一个唯一的密钥?我应该检查数据库中是否有另一个相同的密钥,如果是,那么在创建的密钥是唯一的之前创建一个新密钥?

2 个答案:

答案 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注入黑客攻击。