Fix servlet logout on wildfly/undertow

This commit is contained in:
mposolda 2014-11-03 12:59:40 +01:00
parent 187fbfaf03
commit 229391d48b
5 changed files with 13 additions and 9 deletions

View file

@ -89,12 +89,14 @@ public class ServletSessionTokenStore implements AdapterTokenStore {
req.removeAttribute(KeycloakSecurityContext.class.getName()); req.removeAttribute(KeycloakSecurityContext.class.getName());
HttpSession session = req.getSession(false); HttpSession session = req.getSession(false);
if (session == null) return; if (session == null) return;
KeycloakUndertowAccount account = (KeycloakUndertowAccount)session.getAttribute(KeycloakUndertowAccount.class.getName()); try {
KeycloakUndertowAccount account = (KeycloakUndertowAccount) session.getAttribute(KeycloakUndertowAccount.class.getName());
if (account == null) return; if (account == null) return;
session.removeAttribute(KeycloakSecurityContext.class.getName()); session.removeAttribute(KeycloakSecurityContext.class.getName());
session.removeAttribute(KeycloakUndertowAccount.class.getName()); session.removeAttribute(KeycloakUndertowAccount.class.getName());
if (account.getKeycloakSecurityContext() != null) { } catch (IllegalStateException ise) {
account.getKeycloakSecurityContext().logout(deployment); // Session may be already logged-out in case that app has adminUrl
log.debugf("Session %s logged-out already", session.getId());
} }
} }

View file

@ -215,7 +215,7 @@ public class AdapterTest {
// test logout // test logout
driver.navigate().to("http://localhost:8081/customer-portal/logout"); driver.navigate().to("http://localhost:8081/customer-portal/logout");
Assert.assertTrue(driver.getPageSource().contains("servlet logout ok"));
driver.navigate().to("http://localhost:8081/customer-portal"); driver.navigate().to("http://localhost:8081/customer-portal");

View file

@ -113,6 +113,7 @@ public class CookieTokenStoreAdapterTest {
assertLogged(); assertLogged();
driver.navigate().to("http://localhost:8081/customer-portal/logout"); driver.navigate().to("http://localhost:8081/customer-portal/logout");
Assert.assertTrue(driver.getPageSource().contains("servlet logout ok"));
driver.navigate().to("http://localhost:8081/customer-portal"); driver.navigate().to("http://localhost:8081/customer-portal");
Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
@ -167,7 +168,7 @@ public class CookieTokenStoreAdapterTest {
private void logoutFromCustomerCookiePortal() { private void logoutFromCustomerCookiePortal() {
driver.navigate().to("http://localhost:8081/customer-cookie-portal/logout"); driver.navigate().to("http://localhost:8081/customer-cookie-portal/logout");
Assert.assertTrue(driver.getPageSource().contains("ok")); Assert.assertTrue(driver.getPageSource().contains("servlet logout ok"));
Assert.assertNull(driver.manage().getCookieNamed(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE)); Assert.assertNull(driver.manage().getCookieNamed(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE));
driver.navigate().to("http://localhost:8081/customer-cookie-portal"); driver.navigate().to("http://localhost:8081/customer-cookie-portal");
Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));

View file

@ -28,7 +28,7 @@ public class CustomerServlet extends HttpServlet {
PrintWriter pw = resp.getWriter(); PrintWriter pw = resp.getWriter();
if (req.getRequestURI().toString().endsWith("logout")) { if (req.getRequestURI().toString().endsWith("logout")) {
resp.setStatus(200); resp.setStatus(200);
pw.println("ok"); pw.println("servlet logout ok");
// Call logout before pw.flush // Call logout before pw.flush
req.logout(); req.logout();

View file

@ -173,6 +173,7 @@ public class RelativeUriAdapterTest {
// test logout // test logout
driver.navigate().to("http://localhost:8081/customer-portal/logout"); driver.navigate().to("http://localhost:8081/customer-portal/logout");
Assert.assertTrue(driver.getPageSource().contains("servlet logout ok"));
driver.navigate().to("http://localhost:8081/customer-portal"); driver.navigate().to("http://localhost:8081/customer-portal");
String currentUrl = driver.getCurrentUrl(); String currentUrl = driver.getCurrentUrl();