From 92d9fcfbaca607ae2491c75f75393ef8951ce691 Mon Sep 17 00:00:00 2001 From: Pedro Ruivo Date: Fri, 3 Oct 2025 18:27:57 +0100 Subject: [PATCH] Restarting an user session broken for persistent sessions Fixes #43161 Signed-off-by: Pedro Ruivo <1492066+pruivo@users.noreply.github.com> Co-authored-by: Pedro Ruivo <1492066+pruivo@users.noreply.github.com> --- .../models/sessions/infinispan/UserSessionAdapter.java | 4 ++++ .../models/session/PersistentUserSessionAdapter.java | 5 +++-- .../keycloak/testsuite/model/UserSessionProviderTest.java | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/UserSessionAdapter.java b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/UserSessionAdapter.java index dcb886bea1e..816cc8eda3b 100755 --- a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/UserSessionAdapter.java +++ b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/UserSessionAdapter.java @@ -363,6 +363,10 @@ public class UserSessionAdapter this.clientSessionUpdateTx.addTask(clientSessionId, Tasks.removeSync(offline))); UserSessionUpdateTask task = new UserSessionUpdateTask() { @Override diff --git a/model/storage-private/src/main/java/org/keycloak/models/session/PersistentUserSessionAdapter.java b/model/storage-private/src/main/java/org/keycloak/models/session/PersistentUserSessionAdapter.java index 4bfd326fdbd..c40d01d2ad2 100644 --- a/model/storage-private/src/main/java/org/keycloak/models/session/PersistentUserSessionAdapter.java +++ b/model/storage-private/src/main/java/org/keycloak/models/session/PersistentUserSessionAdapter.java @@ -377,6 +377,7 @@ public class PersistentUserSessionAdapter implements OfflineUserSessionModel { public void setStarted(int started) { getData().setStarted(started); + model.setStarted(started); } public void setBrokerSessionId(String brokerSessionId) { @@ -458,12 +459,12 @@ public class PersistentUserSessionAdapter implements OfflineUserSessionModel { this.rememberMe = rememberMe; } - @Deprecated + @Deprecated(since = "26.5", forRemoval = true) public int getStarted() { return started; } - @Deprecated + @Deprecated(since = "26.5", forRemoval = true) public void setStarted(int started) { this.started = started; } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/model/UserSessionProviderTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/model/UserSessionProviderTest.java index 386ccfb6624..53eea550f99 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/model/UserSessionProviderTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/model/UserSessionProviderTest.java @@ -526,6 +526,7 @@ public class UserSessionProviderTest extends AbstractTestRealmKeycloakTest { kcSession.getContext().setRealm(r); r.setSsoSessionMaxLifespanRememberMe(r.getSsoSessionMaxLifespan() * 4); r.setSsoSessionIdleTimeoutRememberMe(r.getSsoSessionIdleTimeout() * 4); + r.setRememberMe(true); }); // create an user session with remember-me enabled that is older than the default 'max lifespan' timeout but not older than the 'max lifespan remember-me' timeout. @@ -597,6 +598,7 @@ public class UserSessionProviderTest extends AbstractTestRealmKeycloakTest { kcSession.getContext().setRealm(r); r.setSsoSessionMaxLifespanRememberMe(previousMaxLifespan); r.setSsoSessionIdleTimeoutRememberMe(previousMaxIdle); + r.setRememberMe(false); }); } }