Nella costruzione di un sistema basato su Java che richiede identificatori univoci nell'URL, è UUID.randomUUID()
o SecureRandom
una scelta migliore?
Più specificamente, una chiamata a POST /items
restituirà un 201 Created
con una Location al /items/{id}
appena creato dove {id}
è una stringa casuale e l'URL è destinato ad essere utilizzato da richieste HTTP anonime per un finestra temporale limitata.
Questo codice restituisce una stringa di 22 caratteri (ad esempio B-KEPLFdWNZ4JTUnnEq3Og
) con 128 bit di casualità.
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16];
random.nextBytes(bytes);
Encoder encoder = Base64.getUrlEncoder().withoutPadding();
String token = encoder.encodeToString(bytes);
System.out.println(token);
UUID.randomUUID () è un "Fabbrica statica per recuperare un UUID di tipo 4 (generato a caso in modo casuale) L'UUID viene generato utilizzando un generatore di numeri pseudo casuali crittograficamente strong." Questo codice restituisce una stringa di 36 caratteri (ad esempio f0803ce7-8e3d-421a-8126-e5a0bd0a865f
) con 122 bit di casualità.
UUID randomUUID = UUID.randomUUID();
System.out.println(randomUUID);
Questi identificatori verranno anche mantenuti in un database relazionale come tipo di lunghezza fissa CHAR
.