2010-01-06 156 views
0

我有一個帶有用戶表的MySql數據庫。在此表中是出於安全原因正在使用的隨機令牌。到現在爲止,我們一直在通過手動添加行來添加用戶;該令牌是使用MD5(Rand())創建的。將SQL令牌生成器更改爲Java令牌生成器

我現在將以編程方式添加用戶,執行諸如principal.setToken(whatever)之類的操作。複製之前使用的SQL代碼的最簡單方法是什麼?我應該使用MessageDigest和util.Random嗎?有沒有辦法說「YO!作爲SQL代碼運行」?

+0

你可能想多解釋一下。現在「主體」是一個ORM爲你持續的Java對象嗎? – 2010-01-06 22:06:11

+0

是的,主體是一個java對象。 – UmYeah 2010-01-06 22:33:48

回答

0

好吧,如果你想用同樣的程序,保持,你可以將它包裝在一個SQL SELECT如下:

SELECT MD5(Rand()) from SOMETABLE LIMIT 1; 

SOMETABLE是在你的系統中的一些表。我只是試過這個,它在MySQL中起作用。然後,您可以將其封裝在java方法中並返回哈希值。這將讓你前進並保持與以前一樣的標誌。 (如果你這樣做,我也會確保SOMETABLE不是一些大量使用的關鍵任務表)。

另一方面,應該沒有什麼能阻止你使用MessageDigest和Random。這些鏈接可能有所幫助:herehere。除此之外,我可能不會使用隨機數作爲標記,除非碰到大型結果集的可能性對您而言不是問題:您可以從Rand獲得相同的值多次/隨機。我可能會將MD5散列基於唯一標識符和隨機數的組合。使用電子郵件,名稱,時間戳,進程ID,服務器ID以及隨機值的任意組合可能足以爲您提供更好的唯一性機會。再次,這取決於您的系統可以容忍的碰撞的可能性。

希望這會有所幫助。