68 lines
2.4 KiB
Java
68 lines
2.4 KiB
Java
/*
|
|
* Copyright 2025 Google. This software is provided as-is, without warranty or representation for any use or purpose.
|
|
* Your use of it is subject to your agreement with Google.
|
|
*/
|
|
|
|
package com.example.util;
|
|
|
|
import java.util.UUID;
|
|
import java.util.Base64;
|
|
|
|
/**
|
|
* A utility class for generating consistent and formatted session IDs.
|
|
* Centralizing ID generation ensures all parts of the application use the same
|
|
* logic and format.
|
|
*/
|
|
public final class SessionIdGenerator {
|
|
|
|
// Private constructor to prevent instantiation of the utility class.
|
|
private SessionIdGenerator() {}
|
|
|
|
/**
|
|
* Generates a standard, version 4 (random) UUID as a string.
|
|
* This is the most common and robust approach for general-purpose unique IDs.
|
|
* The UUID is a 36-character string with hyphens (e.g., "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx").
|
|
*
|
|
* @return a new, randomly generated UUID string.
|
|
*/
|
|
public static String generateStandardSessionId() {
|
|
return UUID.randomUUID().toString();
|
|
}
|
|
|
|
/**
|
|
* Generates a more compact session ID by removing the hyphens from a standard UUID.
|
|
* This is useful for contexts where a shorter or URL-friendly ID is needed.
|
|
*
|
|
* @return a 32-character UUID string without hyphens.
|
|
*/
|
|
public static String generateCompactSessionId() {
|
|
return UUID.randomUUID().toString().replace("-", "");
|
|
}
|
|
|
|
/**
|
|
* Generates a base64-encoded, URL-safe session ID from a UUID.
|
|
* This provides a very compact, yet robust, representation of the UUID.
|
|
* It's ideal for use in URLs, cookies, or other contexts where size matters.
|
|
*
|
|
* @return a new, base64-encoded UUID string.
|
|
*/
|
|
public static String generateUrlSafeSessionId() {
|
|
UUID uuid = UUID.randomUUID();
|
|
byte[] uuidBytes = toBytes(uuid);
|
|
return Base64.getUrlEncoder().withoutPadding().encodeToString(uuidBytes);
|
|
}
|
|
|
|
// Helper method to convert UUID to a byte array
|
|
private static byte[] toBytes(UUID uuid) {
|
|
long mostSignificantBits = uuid.getMostSignificantBits();
|
|
long leastSignificantBits = uuid.getLeastSignificantBits();
|
|
byte[] bytes = new byte[16];
|
|
for (int i = 0; i < 8; i++) {
|
|
bytes[i] = (byte) (mostSignificantBits >>> (8 * (7 - i)));
|
|
}
|
|
for (int i = 0; i < 8; i++) {
|
|
bytes[8 + i] = (byte) (leastSignificantBits >>> (8 * (7 - i)));
|
|
}
|
|
return bytes;
|
|
}
|
|
} |