Merge pull request #830 from patriot1burke/master

servlet logout fixes
This commit is contained in:
Bill Burke 2014-10-31 10:46:27 -04:00
commit ce94b7e9de
9 changed files with 16 additions and 23 deletions

View file

@ -78,10 +78,6 @@ public class CatalinaCookieTokenStore implements AdapterTokenStore {
public void logout() { public void logout() {
CookieTokenStore.removeCookie(facade); CookieTokenStore.removeCookie(facade);
KeycloakSecurityContext ksc = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
} }
@Override @Override

View file

@ -105,10 +105,6 @@ public class CatalinaSessionTokenStore implements AdapterTokenStore {
Session session = request.getSessionInternal(false); Session session = request.getSessionInternal(false);
if (session != null) { if (session != null) {
session.removeNote(KeycloakSecurityContext.class.getName()); session.removeNote(KeycloakSecurityContext.class.getName());
KeycloakSecurityContext ksc = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
} }
} }

View file

@ -23,6 +23,7 @@ import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.KeycloakDeploymentBuilder; import org.keycloak.adapters.KeycloakDeploymentBuilder;
import org.keycloak.adapters.NodesRegistrationManagement; import org.keycloak.adapters.NodesRegistrationManagement;
import org.keycloak.adapters.PreAuthActionsHandler; import org.keycloak.adapters.PreAuthActionsHandler;
import org.keycloak.adapters.RefreshableKeycloakSecurityContext;
import org.keycloak.enums.TokenStore; import org.keycloak.enums.TokenStore;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
@ -68,6 +69,9 @@ public class KeycloakAuthenticatorValve extends FormAuthenticator implements Lif
if (ksc != null) { if (ksc != null) {
CatalinaHttpFacade facade = new CatalinaHttpFacade(request, null); CatalinaHttpFacade facade = new CatalinaHttpFacade(request, null);
KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade); KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade);
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
AdapterTokenStore tokenStore = getTokenStore(request, facade, deployment); AdapterTokenStore tokenStore = getTokenStore(request, facade, deployment);
tokenStore.logout(); tokenStore.logout();

View file

@ -75,11 +75,6 @@ public class CatalinaCookieTokenStore implements AdapterTokenStore {
@Override @Override
public void logout() { public void logout() {
CookieTokenStore.removeCookie(facade); CookieTokenStore.removeCookie(facade);
KeycloakSecurityContext ksc = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
} }
@Override @Override

View file

@ -103,10 +103,6 @@ public class CatalinaSessionTokenStore implements AdapterTokenStore {
Session session = request.getSessionInternal(false); Session session = request.getSessionInternal(false);
if (session != null) { if (session != null) {
session.removeNote(KeycloakSecurityContext.class.getName()); session.removeNote(KeycloakSecurityContext.class.getName());
KeycloakSecurityContext ksc = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
} }
} }

View file

@ -22,6 +22,7 @@ import org.keycloak.adapters.KeycloakDeployment;
import org.keycloak.adapters.KeycloakDeploymentBuilder; import org.keycloak.adapters.KeycloakDeploymentBuilder;
import org.keycloak.adapters.NodesRegistrationManagement; import org.keycloak.adapters.NodesRegistrationManagement;
import org.keycloak.adapters.PreAuthActionsHandler; import org.keycloak.adapters.PreAuthActionsHandler;
import org.keycloak.adapters.RefreshableKeycloakSecurityContext;
import org.keycloak.enums.TokenStore; import org.keycloak.enums.TokenStore;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
@ -75,6 +76,9 @@ public class KeycloakAuthenticatorValve extends FormAuthenticator implements Lif
if (ksc != null) { if (ksc != null) {
CatalinaHttpFacade facade = new CatalinaHttpFacade(request, null); CatalinaHttpFacade facade = new CatalinaHttpFacade(request, null);
KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade); KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade);
if (ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
AdapterTokenStore tokenStore = getTokenStore(request, facade, deployment); AdapterTokenStore tokenStore = getTokenStore(request, facade, deployment);
tokenStore.logout(); tokenStore.logout();

View file

@ -74,7 +74,6 @@ public class UndertowCookieTokenStore implements AdapterTokenStore {
if (principal == null) return; if (principal == null) return;
CookieTokenStore.removeCookie(facade); CookieTokenStore.removeCookie(facade);
principal.getKeycloakSecurityContext().logout(deployment);
} }
@Override @Override

View file

@ -25,6 +25,7 @@ import io.undertow.server.session.Session;
import io.undertow.util.AttachmentKey; import io.undertow.util.AttachmentKey;
import io.undertow.util.Sessions; import io.undertow.util.Sessions;
import org.keycloak.KeycloakPrincipal; import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.adapters.AdapterDeploymentContext; import org.keycloak.adapters.AdapterDeploymentContext;
import org.keycloak.adapters.AdapterTokenStore; import org.keycloak.adapters.AdapterTokenStore;
import org.keycloak.adapters.AuthChallenge; import org.keycloak.adapters.AuthChallenge;
@ -70,9 +71,14 @@ public abstract class UndertowKeycloakAuthMech implements AuthenticationMechanis
public void handleNotification(SecurityNotification notification) { public void handleNotification(SecurityNotification notification) {
if (notification.getEventType() != SecurityNotification.EventType.LOGGED_OUT) return; if (notification.getEventType() != SecurityNotification.EventType.LOGGED_OUT) return;
UndertowHttpFacade facade = new UndertowHttpFacade(notification.getExchange()); HttpServerExchange exchange = notification.getExchange();
UndertowHttpFacade facade = new UndertowHttpFacade(exchange);
KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade); KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade);
AdapterTokenStore tokenStore = getTokenStore(notification.getExchange(), facade, deployment, securityContext); KeycloakSecurityContext ksc = exchange.getAttachment(UndertowHttpFacade.KEYCLOAK_SECURITY_CONTEXT_KEY);
if (ksc != null && ksc instanceof RefreshableKeycloakSecurityContext) {
((RefreshableKeycloakSecurityContext) ksc).logout(deployment);
}
AdapterTokenStore tokenStore = getTokenStore(exchange, facade, deployment, securityContext);
tokenStore.logout(); tokenStore.logout();
} }
}; };

View file

@ -84,9 +84,6 @@ public class UndertowSessionTokenStore implements AdapterTokenStore {
KeycloakUndertowAccount account = (KeycloakUndertowAccount)session.getAttribute(KeycloakUndertowAccount.class.getName()); KeycloakUndertowAccount account = (KeycloakUndertowAccount)session.getAttribute(KeycloakUndertowAccount.class.getName());
if (account == null) return; if (account == null) return;
session.removeAttribute(KeycloakUndertowAccount.class.getName()); session.removeAttribute(KeycloakUndertowAccount.class.getName());
if (account.getKeycloakSecurityContext() != null) {
account.getKeycloakSecurityContext().logout(deployment);
}
} }
@Override @Override