Class PersistentUserSessionProvider
java.lang.Object
org.keycloak.models.sessions.infinispan.PersistentUserSessionProvider
- All Implemented Interfaces:
SessionRefreshStore,UserSessionProvider,Provider
public class PersistentUserSessionProvider
extends Object
implements UserSessionProvider, SessionRefreshStore
- Author:
- Stian Thorgersen
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> protected final ClientSessionPersistentChangelogBasedTransactionprotected final SessionEventsSenderTransactionprotected final InfinispanKeyGeneratorprotected final org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> protected final org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> protected final KeycloakSessionprotected final org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> protected final UserSessionPersistentChangelogBasedTransaction -
Constructor Summary
ConstructorsConstructorDescriptionPersistentUserSessionProvider(KeycloakSession session, InfinispanKeyGenerator keyGenerator, org.infinispan.Cache<String, SessionEntityWrapper<UserSessionEntity>> sessionCache, org.infinispan.Cache<String, SessionEntityWrapper<UserSessionEntity>> offlineSessionCache, org.infinispan.Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache, org.infinispan.Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> offlineClientSessionCache, ArrayBlockingQueue<PersistentUpdate> asyncQueuePersistentUpdate, SerializeExecutionsByKey<String> serializerSession, SerializeExecutionsByKey<String> serializerOfflineSession, SerializeExecutionsByKey<UUID> serializerClientSession, SerializeExecutionsByKey<UUID> serializerOfflineClientSession) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()createClientSession(RealmModel realm, ClientModel client, UserSessionModel userSession) static UUIDcreateClientSessionUUID(String userSessionId, String clientId) createOfflineClientSession(AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession) createOfflineUserSession(UserSessionModel userSession) createUserSession(String id, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId, UserSessionModel.SessionPersistenceState persistenceState) getActiveClientSessionStats(RealmModel realm, boolean offline) longgetActiveUserSessions(RealmModel realm, ClientModel client) protected org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> getCache(boolean offline) getClientSession(UserSessionModel userSession, ClientModel client, String clientSessionId, boolean offline) protected org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> getClientSessionCache(boolean offline) longgetOfflineSessionsCount(RealmModel realm, ClientModel client) getOfflineUserSession(RealmModel realm, String userSessionId) getOfflineUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId) getOfflineUserSessionsStream(RealmModel realm, ClientModel client, Integer first, Integer max) getOfflineUserSessionsStream(RealmModel realm, UserModel user) intgetStartupTime(RealmModel realm) getUserSession(RealmModel realm, String id) getUserSessionByBrokerSessionId(RealmModel realm, String brokerSessionId) getUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId) protected longgetUserSessionsCount(RealmModel realm, ClientModel client, boolean offline) getUserSessionsStream(RealmModel realm, ClientModel client) getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults) protected Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults, boolean offline) protected Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, UserSessionPredicate predicate, boolean offline) getUserSessionsStream(RealmModel realm, UserModel user) getUserSessionWithPredicate(RealmModel realm, String id, boolean offline, Predicate<UserSessionModel> predicate) <T extends SessionEntity,K>
Map<K,SessionEntityWrapper<T>> importSessionsWithExpiration(Map<K, SessionEntityWrapper<T>> sessionsById, org.infinispan.commons.api.BasicCache<K, SessionEntityWrapper<T>> cache, SessionFunction<T> lifespanMsCalculator, SessionFunction<T> maxIdleTimeMsCalculator) importUserSession(UserSessionModel persistentUserSession, boolean offline) voidimportUserSessions(Collection<UserSessionModel> persistentUserSessions, boolean offline) voidvoidCopy over all sessions in Infinispan to the persistent user sessions in the database.voidonClientRemoved(RealmModel realm, ClientModel client) voidonRealmRemoved(RealmModel realm) protected voidonRealmRemovedEvent(String realmId) protected voidonRemoveUserSessionsEvent(String realmId) protected voidonUserRemoved(RealmModel realm, UserModel user) voidvoidremoveExpired(RealmModel realm) voidremoveLocalUserSessions(String realmId, boolean offline) voidremoveOfflineUserSession(RealmModel realm, UserSessionModel userSession) voidremoveUserSession(RealmModel realm, UserSessionModel session) protected voidremoveUserSession(UserSessionEntity sessionEntity, boolean offline) voidremoveUserSessions(RealmModel realm) voidremoveUserSessions(RealmModel realm, UserModel user) protected voidremoveUserSessions(RealmModel realm, UserModel user, boolean offline) wrapPersistentEntity(RealmModel realm, boolean offline, UserSessionModel persistentUserSession) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.keycloak.models.UserSessionProvider
createUserSession, getClientSession, getUserSessionIfClientExists
-
Field Details
-
session
-
sessionCache
-
offlineSessionCache
protected final org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> offlineSessionCache -
clientSessionCache
protected final org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache -
offlineClientSessionCache
protected final org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> offlineClientSessionCache -
sessionTx
-
clientSessionTx
-
clusterEventsSenderTx
-
keyGenerator
-
-
Constructor Details
-
PersistentUserSessionProvider
public PersistentUserSessionProvider(KeycloakSession session, InfinispanKeyGenerator keyGenerator, org.infinispan.Cache<String, SessionEntityWrapper<UserSessionEntity>> sessionCache, org.infinispan.Cache<String, SessionEntityWrapper<UserSessionEntity>> offlineSessionCache, org.infinispan.Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache, org.infinispan.Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> offlineClientSessionCache, ArrayBlockingQueue<PersistentUpdate> asyncQueuePersistentUpdate, SerializeExecutionsByKey<String> serializerSession, SerializeExecutionsByKey<String> serializerOfflineSession, SerializeExecutionsByKey<UUID> serializerClientSession, SerializeExecutionsByKey<UUID> serializerOfflineClientSession)
-
-
Method Details
-
getCache
protected org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> getCache(boolean offline) -
getClientSessionCache
protected org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> getClientSessionCache(boolean offline) -
getPersisterLastSessionRefreshStore
- Specified by:
getPersisterLastSessionRefreshStorein interfaceSessionRefreshStore
-
getKeycloakSession
- Specified by:
getKeycloakSessionin interfaceUserSessionProvider
-
createClientSession
public AuthenticatedClientSessionModel createClientSession(RealmModel realm, ClientModel client, UserSessionModel userSession) - Specified by:
createClientSessionin interfaceUserSessionProvider
-
createUserSession
public UserSessionModel createUserSession(String id, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId, UserSessionModel.SessionPersistenceState persistenceState) - Specified by:
createUserSessionin interfaceUserSessionProvider
-
getUserSession
- Specified by:
getUserSessionin interfaceUserSessionProvider
-
getUserSessionsStream
protected Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, UserSessionPredicate predicate, boolean offline) -
getClientSession
public AuthenticatedClientSessionAdapter getClientSession(UserSessionModel userSession, ClientModel client, String clientSessionId, boolean offline) - Specified by:
getClientSessionin interfaceUserSessionProvider
-
getUserSessionsStream
- Specified by:
getUserSessionsStreamin interfaceUserSessionProvider
-
getUserSessionByBrokerUserIdStream
public Stream<UserSessionModel> getUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId) - Specified by:
getUserSessionByBrokerUserIdStreamin interfaceUserSessionProvider
-
getUserSessionByBrokerSessionId
- Specified by:
getUserSessionByBrokerSessionIdin interfaceUserSessionProvider
-
getUserSessionsStream
- Specified by:
getUserSessionsStreamin interfaceUserSessionProvider
-
getUserSessionsStream
public Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults) - Specified by:
getUserSessionsStreamin interfaceUserSessionProvider
-
getUserSessionsStream
protected Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults, boolean offline) -
getUserSessionWithPredicate
public UserSessionModel getUserSessionWithPredicate(RealmModel realm, String id, boolean offline, Predicate<UserSessionModel> predicate) - Specified by:
getUserSessionWithPredicatein interfaceUserSessionProvider
-
getActiveUserSessions
- Specified by:
getActiveUserSessionsin interfaceUserSessionProvider
-
getActiveClientSessionStats
- Specified by:
getActiveClientSessionStatsin interfaceUserSessionProvider
-
getUserSessionsCount
-
removeUserSession
- Specified by:
removeUserSessionin interfaceUserSessionProvider
-
removeUserSessions
- Specified by:
removeUserSessionsin interfaceUserSessionProvider
-
removeUserSessions
-
removeAllExpired
public void removeAllExpired()- Specified by:
removeAllExpiredin interfaceUserSessionProvider
-
removeExpired
- Specified by:
removeExpiredin interfaceUserSessionProvider
-
removeUserSessions
- Specified by:
removeUserSessionsin interfaceUserSessionProvider
-
onRemoveUserSessionsEvent
-
removeLocalUserSessions
-
onRealmRemoved
- Specified by:
onRealmRemovedin interfaceUserSessionProvider
-
onRealmRemovedEvent
-
onClientRemoved
- Specified by:
onClientRemovedin interfaceUserSessionProvider
-
onUserRemoved
-
close
public void close()- Specified by:
closein interfaceProvider- Specified by:
closein interfaceUserSessionProvider
-
getStartupTime
- Specified by:
getStartupTimein interfaceUserSessionProvider
-
removeUserSession
-
createOfflineUserSession
- Specified by:
createOfflineUserSessionin interfaceUserSessionProvider
-
getOfflineUserSession
- Specified by:
getOfflineUserSessionin interfaceUserSessionProvider
-
getOfflineUserSessionByBrokerUserIdStream
public Stream<UserSessionModel> getOfflineUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId) - Specified by:
getOfflineUserSessionByBrokerUserIdStreamin interfaceUserSessionProvider
-
removeOfflineUserSession
- Specified by:
removeOfflineUserSessionin interfaceUserSessionProvider
-
createOfflineClientSession
public AuthenticatedClientSessionModel createOfflineClientSession(AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession) - Specified by:
createOfflineClientSessionin interfaceUserSessionProvider
-
getOfflineUserSessionsStream
- Specified by:
getOfflineUserSessionsStreamin interfaceUserSessionProvider
-
getOfflineSessionsCount
- Specified by:
getOfflineSessionsCountin interfaceUserSessionProvider
-
getOfflineUserSessionsStream
public Stream<UserSessionModel> getOfflineUserSessionsStream(RealmModel realm, ClientModel client, Integer first, Integer max) - Specified by:
getOfflineUserSessionsStreamin interfaceUserSessionProvider
-
importUserSessions
public void importUserSessions(Collection<UserSessionModel> persistentUserSessions, boolean offline) - Specified by:
importUserSessionsin interfaceUserSessionProvider
-
importUserSession
public SessionEntityWrapper<UserSessionEntity> importUserSession(UserSessionModel persistentUserSession, boolean offline) -
importSessionsWithExpiration
public <T extends SessionEntity,K> Map<K,SessionEntityWrapper<T>> importSessionsWithExpiration(Map<K, SessionEntityWrapper<T>> sessionsById, org.infinispan.commons.api.BasicCache<K, SessionEntityWrapper<T>> cache, SessionFunction<T> lifespanMsCalculator, SessionFunction<T> maxIdleTimeMsCalculator) -
wrapPersistentEntity
public SessionEntityWrapper<UserSessionEntity> wrapPersistentEntity(RealmModel realm, boolean offline, UserSessionModel persistentUserSession) -
createClientSessionUUID
-
migrate
- Specified by:
migratein interfaceUserSessionProvider
-
migrateNonPersistentSessionsToPersistentSessions
public void migrateNonPersistentSessionsToPersistentSessions()Copy over all sessions in Infinispan to the persistent user sessions in the database. This method is public so people can use it to build their custom migrations or re-import sessions when necessary in a future version of Keycloak.
-