2010-01-06 5 views
0

J'ai une base de données MySql avec une table d'utilisateurs. Dans cette table est un jeton aléatoire qui est utilisé pour des raisons de sécurité. Jusqu'à présent, nous avons ajouté des utilisateurs en ajoutant manuellement des lignes; Le jeton a été créé en utilisant MD5(Rand()).Modification du générateur de jetons SQL vers le générateur de jetons Java

Je vais maintenant ajouter des utilisateurs par programmation en faisant quelque chose comme principal.setToken(whatever). Quel est le moyen le plus simple de répliquer le code SQL que j'utilisais auparavant? Dois-je utiliser MessageDigest et util.Random? Y at-il un moyen de dire "YO! Exécuter ceci comme code SQL"?

+0

Vous voudrez peut-être expliquer un peu plus. Est-ce que "principal" est maintenant un objet Java qu'un ORM persiste pour vous? –

+0

Oui, le principal est un objet Java. – UmYeah

Répondre

0

Eh bien, si vous voulez continuer à utiliser la même routine, vous pouvez l'envelopper dans un SQL SELECT comme suit:

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

SOMETABLE est une table dans votre système. J'ai juste essayé ceci et cela fonctionne dans MySQL. Vous pouvez ensuite l'intégrer dans une méthode java et renvoyer la valeur de hachage. Cela vous permettra d'avancer et de conserver le même jeton que précédemment. (Si vous faites cela, je ferais en sorte que SOMETABLE ne soit pas une table critique très utilisée.)

De l'autre côté, rien ne devrait vous empêcher d'utiliser MessageDigest et Random. Ces liens peuvent aider: here et here. En passant, je n'utiliserais probablement pas le nombre aléatoire comme jeton, à moins que la possibilité de collisions sur un grand ensemble de résultats ne soit pas un problème pour vous: vous pourriez obtenir la même valeur plusieurs fois de Rand /Au hasard. Je base probablement le hachage MD5 sur une combinaison d'identifiant unique et un nombre aléatoire. L'utilisation de n'importe quelle combinaison d'e-mail, de nom, d'horodatage, d'identifiant de processus, d'identifiant de serveur et de valeur aléatoire peut suffire à vous donner une meilleure chance d'être unique. Encore une fois, cela dépend du risque de collision que votre système peut tolérer.

Espérons que cela aide.