package org.wildfly.swarm.keycloak.deployment; import io.undertow.server.HttpServerExchange; import io.undertow.servlet.api.ThreadSetupHandler; import org.keycloak.KeycloakSecurityContext; import org.keycloak.adapters.undertow.OIDCUndertowHttpFacade; /** * @author Bob McWhirter */ class KeycloakThreadSetupHandler implements ThreadSetupHandler { @Override public <T, C> Action<T, C> create(final Action<T, C> action) { return new Action<T, C>() { @Override public T call(HttpServerExchange exchange, C context) throws Exception { if (exchange == null) { return null; } KeycloakSecurityContext c = exchange.getAttachment(OIDCUndertowHttpFacade.KEYCLOAK_SECURITY_CONTEXT_KEY); KeycloakSecurityContextAssociation.associate(c); try { return action.call(exchange, context); } finally { KeycloakSecurityContextAssociation.disassociate(); } } }; } }