CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-keycloak--keycloak-common

Common library and dependencies shared with server and all adapters for the Keycloak identity and access management system

Pending
Overview
Eval results
Files

utility-functions.mddocs/

Utility Functions

This document covers the extensive utility functionality in the org.keycloak.common.util package that provides helper classes for encoding, networking, I/O operations, collections, and various common programming tasks.

Encoding and Data Conversion Utilities

Base64 Encoding

The Base64 class provides comprehensive Base64 encoding and decoding functionality.

public class Base64 {
    // Basic encoding methods
    public static String encodeBytes(byte[] source);
    public static String encodeBytes(byte[] source, int options);
    public static String encodeBytes(byte[] source, int off, int len);
    public static String encodeBytes(byte[] source, int off, int len, int options);
    
    // Object serialization encoding
    public static String encodeObject(Serializable serializableObject);
    public static String encodeObject(Serializable serializableObject, int options);
    
    // Buffer-based encoding
    public static void encode(ByteBuffer raw, ByteBuffer encoded);
    public static void encode(ByteBuffer raw, CharBuffer encoded);
    
    // Nested stream classes
    public static class InputStream extends FilterInputStream {
        public InputStream(java.io.InputStream in);
        public InputStream(java.io.InputStream in, int options);
    }
    
    public static class OutputStream extends FilterOutputStream {
        public OutputStream(java.io.OutputStream out);
        public OutputStream(java.io.OutputStream out, int options);
    }
}

Base64Url Encoding

URL-safe Base64 encoding utilities for web applications.

public class Base64Url {
    public static String encode(byte[] bytes);
    public static byte[] decode(String str);
    public static String encodeToString(byte[] bytes);
}

Usage Examples

// Basic Base64 encoding
byte[] data = "Hello, World!".getBytes();
String encoded = Base64.encodeBytes(data);

// Serialize and encode object
Serializable obj = new MySerializableObject();
String encodedObj = Base64.encodeObject(obj);

// URL-safe encoding for web use
String urlSafe = Base64Url.encode(data);
byte[] decoded = Base64Url.decode(urlSafe);

// Stream-based encoding
try (Base64.OutputStream b64Out = new Base64.OutputStream(fileOut)) {
    b64Out.write(data);
}

Collection Utilities

MultivaluedMap Interface

A map interface that supports multiple values per key, commonly used in HTTP headers and form parameters.

public interface MultivaluedMap<K, V> extends Map<K, List<V>> {
    // Single value operations
    void putSingle(K key, V value);
    V getFirst(K key);
    V getFirstOrDefault(K key, V defaultValue);
    
    // Multiple value operations  
    void add(K key, V value);
    void addFirst(K key, V value);
    void addAll(K key, V... newValues);
    void addAll(K key, List<V> valueList);
    void addMultiple(K key, Collection<V> values);
    
    // List operations
    List<V> getList(K key);
    List<V> createListInstance();
    
    // Bulk operations
    void addAll(MultivaluedMap<K, V> other);
    
    // Comparison
    boolean equalsIgnoreValueOrder(MultivaluedMap<K, V> omap);
}

MultivaluedHashMap Implementation

public class MultivaluedHashMap<K, V> extends HashMap<K, List<V>> implements MultivaluedMap<K, V> {
    public MultivaluedHashMap();
    public MultivaluedHashMap(Map<K, List<V>> map);
    
    // All MultivaluedMap interface methods implemented
}

ConcurrentMultivaluedHashMap Implementation

Thread-safe implementation of MultivaluedMap.

public class ConcurrentMultivaluedHashMap<K, V> extends ConcurrentHashMap<K, List<V>> 
        implements MultivaluedMap<K, V> {
    public ConcurrentMultivaluedHashMap();
    
    // Thread-safe implementations of all MultivaluedMap methods
}

Usage Examples

// Create and populate multivalued map
MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();
headers.putSingle("Content-Type", "application/json");
headers.add("Accept", "application/json");
headers.add("Accept", "text/plain");

// Retrieve values
String contentType = headers.getFirst("Content-Type");
List<String> acceptValues = headers.getList("Accept");

// Thread-safe version for concurrent access
MultivaluedMap<String, String> concurrent = new ConcurrentMultivaluedHashMap<>();

Network and URI Utilities

KeycloakUriBuilder

URI builder specifically designed for Keycloak's URL patterns.

public class KeycloakUriBuilder {
    public static KeycloakUriBuilder fromUri(String uriTemplate);
    public static KeycloakUriBuilder fromUri(URI uri);
    
    // Path building methods
    public KeycloakUriBuilder path(String segment);
    public KeycloakUriBuilder queryParam(String name, Object... values);
    
    // Build final URI
    public URI build(Object... values);
    public String buildAsString(Object... values);
}

UriUtils

General URI manipulation utilities.

public class UriUtils {
    public static String formatUrl(String url, Object... args);
    public static MultivaluedMap<String, String> parseQueryString(String query);
    public static String encodeQueryString(MultivaluedMap<String, String> params);
}

NetworkUtils

Network-related utilities for IP addresses and hostnames.

public class NetworkUtils {
    public static boolean isValidIpAddress(String ip);
    public static boolean isLocalhost(String host);
    public static String getLocalHostname();
    public static List<String> getLocalAddresses();
}

Usage Examples

// Build Keycloak URLs
KeycloakUriBuilder builder = KeycloakUriBuilder.fromUri("/auth/realms/{realm}/protocol/openid-connect/token");
URI tokenUri = builder.build("master");

// Parse query parameters
String query = "client_id=my-client&response_type=code";
MultivaluedMap<String, String> params = UriUtils.parseQueryString(query);
String clientId = params.getFirst("client_id");

// Network utilities
boolean isLocal = NetworkUtils.isLocalhost("127.0.0.1");
String hostname = NetworkUtils.getLocalHostname();

I/O and File Utilities

IoUtils

Input/output stream utilities.

public class IoUtils {
    public static byte[] readBytes(InputStream is) throws IOException;
    public static String readString(InputStream is, Charset charset) throws IOException;
    public static void copy(InputStream input, OutputStream output) throws IOException;
    public static void closeQuietly(Closeable closeable);
}

FindFile

File finding and resource loading utilities.

public class FindFile {
    public static InputStream findFile(String fileName);
    public static URL findFileUrl(String fileName);
    public static File findFileFromClasspath(String fileName);
}

Usage Examples

// Read file contents
try (InputStream is = FindFile.findFile("config.properties")) {
    byte[] content = IoUtils.readBytes(is);
    String text = IoUtils.readString(is, StandardCharsets.UTF_8);
}

// Safe resource closing
Closeable resource = openResource();
IoUtils.closeQuietly(resource); // No exception thrown

Security and Cryptographic Utilities

KeyUtils

Key generation and manipulation utilities.

public class KeyUtils {
    public static KeyPair generateRsaKeyPair(int keySize);
    public static PublicKey extractPublicKey(PrivateKey privateKey);
    public static String getKeyId(Key key);
}

CertificateUtils

Certificate processing utilities.

public class CertificateUtils {
    public static X509Certificate parseCertificate(byte[] certificateBytes);
    public static byte[] getCertificateBytes(X509Certificate certificate);
    public static String getCertificatePem(X509Certificate certificate);
}

PemUtils

PEM format processing utilities.

public class PemUtils {
    public static PrivateKey decodePrivateKey(String pem);
    public static PublicKey decodePublicKey(String pem);
    public static X509Certificate decodeCertificate(String pem);
    
    public static String encode(PrivateKey key);
    public static String encode(PublicKey key);
    public static String encode(X509Certificate certificate);
}

Usage Examples

// Generate key pair
KeyPair keyPair = KeyUtils.generateRsaKeyPair(2048);
String keyId = KeyUtils.getKeyId(keyPair.getPublic());

// Process PEM certificates
String pemCert = "-----BEGIN CERTIFICATE-----\n...";
X509Certificate cert = PemUtils.decodeCertificate(pemCert);
String encodedCert = PemUtils.encode(cert);

Time and Environment Utilities

Time

Time manipulation and formatting utilities.

public class Time {
    public static int currentTime();
    public static long currentTimeMillis();
    public static String formatTime(long timeMillis, String pattern);
    public static Date parseTime(String timeString, String pattern);
}

Environment

Environment and system information utilities.

public class Environment {
    public static String getProperty(String key);
    public static String getProperty(String key, String defaultValue);
    public static boolean isWindows();
    public static boolean isLinux();
    public static boolean isMac();
}

EnvUtil

Environment variable processing utilities.

public class EnvUtil {
    public static String replace(String value);
    public static Properties replaceProperties(Properties properties);
    public static Map<String, String> getEnvironmentVariables();
}

Usage Examples

// Time operations
int currentTime = Time.currentTime();
String formatted = Time.formatTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss");

// Environment detection
if (Environment.isWindows()) {
    // Windows-specific logic
}

// Environment variable substitution
String config = "Database URL: ${DB_URL}";
String resolved = EnvUtil.replace(config);

String and Text Processing Utilities

StringPropertyReplacer

Property placeholder replacement in strings.

public class StringPropertyReplacer {
    public static String replaceProperties(String string);
    public static String replaceProperties(String string, Properties properties);
    public static String replaceProperties(String string, Map<String, String> properties);
}

HtmlUtils

HTML content processing utilities.

public class HtmlUtils {
    public static String escapeAttribute(String value);
    public static String escapeHtml(String value);
    public static String unescapeHtml(String value);
}

Usage Examples

// Property replacement
String template = "Hello ${user.name}, welcome to ${app.name}!";
Properties props = new Properties();
props.setProperty("user.name", "John");
props.setProperty("app.name", "Keycloak");
String result = StringPropertyReplacer.replaceProperties(template, props);

// HTML escaping
String userInput = "<script>alert('xss')</script>";
String safe = HtmlUtils.escapeHtml(userInput);

Functional and Collection Utilities

TriFunction

Functional interface for three-parameter functions.

@FunctionalInterface
public interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
    
    default <W> TriFunction<T, U, V, W> andThen(Function<? super R, ? extends W> after);
}

CollectionUtil

Collection manipulation utilities.

public class CollectionUtil {
    public static <T> List<T> collectionToList(Collection<T> collection);
    public static <T> Set<T> collectionToSet(Collection<T> collection);
    public static boolean isEmpty(Collection<?> collection);
    public static boolean isNotEmpty(Collection<?> collection);
}

Usage Examples

// TriFunction usage
TriFunction<String, Integer, Boolean, String> formatter = 
    (name, age, active) -> String.format("%s (%d) - %s", name, age, active ? "Active" : "Inactive");

String result = formatter.apply("John", 30, true);

// Collection utilities
List<String> items = Arrays.asList("a", "b", "c");
Set<String> uniqueItems = CollectionUtil.collectionToSet(items);
boolean hasItems = CollectionUtil.isNotEmpty(items);

Advanced Utilities

PathMatcher

Path pattern matching utilities for URL routing.

public class PathMatcher {
    public static boolean matches(String pattern, String path);
    public static Map<String, String> extractPathVariables(String pattern, String path);
}

Retry

Retry mechanism utilities for robust operations.

public class Retry {
    public static <T> T execute(Supplier<T> operation, int maxAttempts);
    public static <T> T execute(Supplier<T> operation, int maxAttempts, long delay);
    public static void execute(Runnable operation, int maxAttempts);
}

SecretGenerator

Secure random value generation utilities.

public class SecretGenerator {
    public static String generateSecret(int length);
    public static byte[] generateRandomBytes(int length);
    public static String generateUuid();
}

Usage Examples

// Path matching
boolean matches = PathMatcher.matches("/users/{id}", "/users/123");
Map<String, String> vars = PathMatcher.extractPathVariables("/users/{id}", "/users/123");
String userId = vars.get("id"); // "123"

// Retry operations
String result = Retry.execute(() -> {
    return callExternalService();
}, 3, 1000); // 3 attempts, 1 second delay

// Generate secrets
String secret = SecretGenerator.generateSecret(32);
String uuid = SecretGenerator.generateUuid();

HTTP and Web Utilities

HttpPostRedirect

HTTP POST redirect utilities.

public class HttpPostRedirect {
    public static void sendPostRedirect(HttpServletResponse response, String url, Map<String, String> params);
    public static String generateAutoSubmitForm(String url, Map<String, String> params);
}

MimeTypeUtil

MIME type detection and handling utilities.

public class MimeTypeUtil {
    public static String getContentType(String filename);
    public static boolean isTextType(String contentType);
    public static boolean isImageType(String contentType);
}

Usage Examples

// POST redirect
Map<String, String> params = new HashMap<>();
params.put("token", "abc123");
params.put("state", "xyz789");
HttpPostRedirect.sendPostRedirect(response, "https://client.example.com/callback", params);

// MIME type detection
String contentType = MimeTypeUtil.getContentType("document.pdf");
boolean isText = MimeTypeUtil.isTextType("text/plain");

Specialized Utilities

KerberosSerializationUtils

Kerberos-specific serialization utilities.

public class KerberosSerializationUtils {
    public static byte[] serialize(Object obj) throws IOException;
    public static <T> T deserialize(byte[] bytes, Class<T> clazz) throws IOException, ClassNotFoundException;
}

MultiSiteUtils

Multi-site deployment utilities.

public class MultiSiteUtils {
    public static String getCurrentSite();
    public static boolean isMultiSiteEnabled();
    public static String getSiteFromRequest(HttpServletRequest request);
}

ObjectUtil

General object manipulation utilities.

public class ObjectUtil {
    public static boolean isEqual(Object a, Object b);
    public static int hashCode(Object... objects);
    public static <T> T defaultIfNull(T object, T defaultValue);
}

This comprehensive utility package provides essential functionality for building robust Keycloak applications and integrations, covering everything from basic data manipulation to advanced cryptographic operations and web service utilities.

Install with Tessl CLI

npx tessl i tessl/maven-org-keycloak--keycloak-common

docs

constants-configuration.md

core-functionality.md

crypto-utilities.md

enums-types.md

index.md

profile-management.md

reflection-utilities.md

utility-functions.md

tile.json