繁体   English   中英

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

[英]JavaEE application create a unique key using java.util.UUID

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

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

我的问题是,当使用java.util.UUID创建该键时,我怎么知道它是唯一键? 我是否应该检查数据库中是否还有另一个相等的密钥,如果是,则创建一个新的密钥,直到创建的密钥是唯一的?

随机生成的128位整数等于另一个随机生成的整数的机会是什么?

如果只需要省心,请使用主键,并且如果插入由于键冲突而失败,请重新创建新的UUID并重试插入。

您可以通过两种方法在Java中执行UUID。

Java 5及更高版本的最佳实践是使用java.util.UUID它是字符串大小36个字符。 该链接为您提供了简单的示例

讨论将给您答案 很结实。 我从未见过有人在抱怨它的独特性。

但是,如果您添加到数据库或在存储中使用或通过网络使用,则大小可能很重要。 因此,转换为其他格式-Base是一个很好的解决方案(Base64,Base85等)。 在此处查看此讨论。 您可以使用apache库org.apache.commons.codec.binary.Base64 Base85对于URL不安全。

我的建议是,如果您可能有应用程序/会话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注入黑客攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM