簡體   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