Class InfinispanUserSessionProvider
- java.lang.Object
-
- org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider
-
- All Implemented Interfaces:
UserSessionProvider,Provider
public class InfinispanUserSessionProvider extends Object implements UserSessionProvider
- Author:
- Stian Thorgersen
-
-
Field Summary
-
Constructor Summary
Constructors Constructor Description InfinispanUserSessionProvider(KeycloakSession session, RemoteCacheInvoker remoteCacheInvoker, CrossDCLastSessionRefreshStore lastSessionRefreshStore, CrossDCLastSessionRefreshStore offlineLastSessionRefreshStore, PersisterLastSessionRefreshStore persisterLastSessionRefreshStore, 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, boolean loadOfflineSessionsFromDatabase)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()AuthenticatedClientSessionModelcreateClientSession(RealmModel realm, ClientModel client, UserSessionModel userSession)AuthenticatedClientSessionModelcreateOfflineClientSession(AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession)Will automatically attach newly created offline client session to the offlineUserSessionUserSessionModelcreateOfflineUserSession(UserSessionModel userSession)Newly created userSession won't contain attached AuthenticatedClientSessionsUserSessionModelcreateUserSession(String id, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId, UserSessionModel.SessionPersistenceState persistenceState)UserSessionModelcreateUserSession(RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)Map<String,Long>getActiveClientSessionStats(RealmModel realm, boolean offline)Returns a summary of client sessions key is client.getId()longgetActiveUserSessions(RealmModel realm, ClientModel client)protected org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>>getCache(boolean offline)AuthenticatedClientSessionAdaptergetClientSession(UserSessionModel userSession, ClientModel client, String clientSessionId, boolean offline)AuthenticatedClientSessionAdaptergetClientSession(UserSessionModel userSession, ClientModel client, UUID clientSessionId, boolean offline)protected org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>>getClientSessionCache(boolean offline)protected InfinispanChangelogBasedTransaction<UUID,AuthenticatedClientSessionEntity>getClientSessionTransaction(boolean offline)KeycloakSessiongetKeycloakSession()Returns currently used Keycloak session.protected CrossDCLastSessionRefreshStoregetLastSessionRefreshStore()protected CrossDCLastSessionRefreshStoregetOfflineLastSessionRefreshStore()longgetOfflineSessionsCount(RealmModel realm, ClientModel client)UserSessionAdaptergetOfflineUserSession(RealmModel realm, String userSessionId)UserSessionModelgetOfflineUserSessionByBrokerSessionId(RealmModel realm, String brokerSessionId)Stream<UserSessionModel>getOfflineUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId)Obtains the offline user sessions associated with the user that matches the specifiedbrokerUserId.Stream<UserSessionModel>getOfflineUserSessionsStream(RealmModel realm, ClientModel client, Integer first, Integer max)Obtains the offline user sessions associated with the specified client, starting from thefirstResultand containing at mostmaxResults.Stream<UserSessionModel>getOfflineUserSessionsStream(RealmModel realm, UserModel user)Obtains the offline user sessions associated with the specified user.protected PersisterLastSessionRefreshStoregetPersisterLastSessionRefreshStore()intgetStartupTime(RealmModel realm)protected InfinispanChangelogBasedTransaction<String,UserSessionEntity>getTransaction(boolean offline)UserSessionModelgetUserSession(RealmModel realm, String id)protected UserSessionAdaptergetUserSession(RealmModel realm, String id, boolean offline)UserSessionModelgetUserSessionByBrokerSessionId(RealmModel realm, String brokerSessionId)Stream<UserSessionModel>getUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId)Obtains the online user sessions associated with the user that matches the specifiedbrokerUserId.protected Stream<UserSessionModel>getUserSessionModels(RealmModel realm, Integer firstResult, Integer maxResults, boolean offline, UserSessionPredicate predicate)protected longgetUserSessionsCount(RealmModel realm, ClientModel client, boolean offline)Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, ClientModel client)Obtains the online user sessions associated with the specified client.Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults)Obtains the online user sessions associated with the specified client, starting from thefirstResultand containing at mostmaxResults.protected Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults, boolean offline)protected Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, UserSessionPredicate predicate, boolean offline)Stream<UserSessionModel>getUserSessionsStream(RealmModel realm, UserModel user)Obtains the online user sessions associated with the specified user.UserSessionModelgetUserSessionWithPredicate(RealmModel realm, String id, boolean offline, Predicate<UserSessionModel> predicate)Return userSession of specified ID as long as the predicate passes.protected UserSessionAdapterimportUserSession(UserSessionModel userSession, boolean offline)voidimportUserSessions(Collection<UserSessionModel> persistentUserSessions, boolean offline)Triggered by persister during pre-load.voidonClientRemoved(RealmModel realm, ClientModel client)protected voidonClientRemovedEvent(String realmId, String clientUuid)voidonRealmRemoved(RealmModel realm)protected voidonRealmRemovedEvent(String realmId)protected voidonRemoveUserSessionsEvent(String realmId)protected voidonUserRemoved(RealmModel realm, UserModel user)voidremoveAllExpired()Remove expired user sessions and client sessions in all the realmsvoidremoveExpired(RealmModel realm)Removes expired user sessions owned by this realm from this provider.voidremoveLocalUserSessions(String realmId, boolean offline)voidremoveOfflineUserSession(RealmModel realm, UserSessionModel userSession)Removes the attached clientSessions as wellvoidremoveUserSession(RealmModel realm, UserSessionModel session)This will remove attached ClientLoginSessionModels tooprotected voidremoveUserSession(UserSessionEntity sessionEntity, boolean offline)voidremoveUserSessions(RealmModel realm)voidremoveUserSessions(RealmModel realm, UserModel user)protected voidremoveUserSessions(RealmModel realm, UserModel user, boolean offline)
-
-
-
Field Detail
-
session
protected final KeycloakSession session
-
sessionCache
protected final org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> 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
protected final InfinispanChangelogBasedTransaction<String,UserSessionEntity> sessionTx
-
offlineSessionTx
protected final InfinispanChangelogBasedTransaction<String,UserSessionEntity> offlineSessionTx
-
clientSessionTx
protected final InfinispanChangelogBasedTransaction<UUID,AuthenticatedClientSessionEntity> clientSessionTx
-
offlineClientSessionTx
protected final InfinispanChangelogBasedTransaction<UUID,AuthenticatedClientSessionEntity> offlineClientSessionTx
-
clusterEventsSenderTx
protected final SessionEventsSenderTransaction clusterEventsSenderTx
-
lastSessionRefreshStore
protected final CrossDCLastSessionRefreshStore lastSessionRefreshStore
-
offlineLastSessionRefreshStore
protected final CrossDCLastSessionRefreshStore offlineLastSessionRefreshStore
-
persisterLastSessionRefreshStore
protected final PersisterLastSessionRefreshStore persisterLastSessionRefreshStore
-
remoteCacheInvoker
protected final RemoteCacheInvoker remoteCacheInvoker
-
keyGenerator
protected final InfinispanKeyGenerator keyGenerator
-
loadOfflineSessionsFromDatabase
protected final boolean loadOfflineSessionsFromDatabase
-
-
Constructor Detail
-
InfinispanUserSessionProvider
public InfinispanUserSessionProvider(KeycloakSession session, RemoteCacheInvoker remoteCacheInvoker, CrossDCLastSessionRefreshStore lastSessionRefreshStore, CrossDCLastSessionRefreshStore offlineLastSessionRefreshStore, PersisterLastSessionRefreshStore persisterLastSessionRefreshStore, 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, boolean loadOfflineSessionsFromDatabase)
-
-
Method Detail
-
getCache
protected org.infinispan.Cache<String,SessionEntityWrapper<UserSessionEntity>> getCache(boolean offline)
-
getTransaction
protected InfinispanChangelogBasedTransaction<String,UserSessionEntity> getTransaction(boolean offline)
-
getClientSessionCache
protected org.infinispan.Cache<UUID,SessionEntityWrapper<AuthenticatedClientSessionEntity>> getClientSessionCache(boolean offline)
-
getClientSessionTransaction
protected InfinispanChangelogBasedTransaction<UUID,AuthenticatedClientSessionEntity> getClientSessionTransaction(boolean offline)
-
getLastSessionRefreshStore
protected CrossDCLastSessionRefreshStore getLastSessionRefreshStore()
-
getOfflineLastSessionRefreshStore
protected CrossDCLastSessionRefreshStore getOfflineLastSessionRefreshStore()
-
getPersisterLastSessionRefreshStore
protected PersisterLastSessionRefreshStore getPersisterLastSessionRefreshStore()
-
getKeycloakSession
public KeycloakSession getKeycloakSession()
Description copied from interface:UserSessionProviderReturns currently used Keycloak session.- Specified by:
getKeycloakSessionin interfaceUserSessionProvider- Returns:
KeycloakSession
-
createClientSession
public AuthenticatedClientSessionModel createClientSession(RealmModel realm, ClientModel client, UserSessionModel userSession)
- Specified by:
createClientSessionin interfaceUserSessionProvider
-
createUserSession
public UserSessionModel createUserSession(RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
- Specified by:
createUserSessionin 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
public UserSessionModel getUserSession(RealmModel realm, String id)
- Specified by:
getUserSessionin interfaceUserSessionProvider
-
getUserSession
protected UserSessionAdapter getUserSession(RealmModel realm, String id, boolean offline)
-
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
-
getClientSession
public AuthenticatedClientSessionAdapter getClientSession(UserSessionModel userSession, ClientModel client, UUID clientSessionId, boolean offline)
- Specified by:
getClientSessionin interfaceUserSessionProvider
-
getUserSessionsStream
public Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, UserModel user)
Description copied from interface:UserSessionProviderObtains the online user sessions associated with the specified user.- Specified by:
getUserSessionsStreamin interfaceUserSessionProvider- Parameters:
realm- a reference to the realm.user- the user whose sessions are being searched.- Returns:
- a non-null
Streamof online user sessions.
-
getUserSessionByBrokerUserIdStream
public Stream<UserSessionModel> getUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId)
Description copied from interface:UserSessionProviderObtains the online user sessions associated with the user that matches the specifiedbrokerUserId.- Specified by:
getUserSessionByBrokerUserIdStreamin interfaceUserSessionProvider- Parameters:
realm- a reference to the realm.brokerUserId- the id of the broker user whose sessions are being searched.- Returns:
- a non-null
Streamof online user sessions.
-
getUserSessionByBrokerSessionId
public UserSessionModel getUserSessionByBrokerSessionId(RealmModel realm, String brokerSessionId)
- Specified by:
getUserSessionByBrokerSessionIdin interfaceUserSessionProvider
-
getUserSessionsStream
public Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, ClientModel client)
Description copied from interface:UserSessionProviderObtains the online user sessions associated with the specified client.- Specified by:
getUserSessionsStreamin interfaceUserSessionProvider- Parameters:
realm- a reference to the realm.client- the client whose user sessions are being searched.- Returns:
- a non-null
Streamof online user sessions.
-
getUserSessionsStream
public Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults)
Description copied from interface:UserSessionProviderObtains the online user sessions associated with the specified client, starting from thefirstResultand containing at mostmaxResults.- Specified by:
getUserSessionsStreamin interfaceUserSessionProvider- Parameters:
realm- a reference tot he realm.client- the client whose user sessions are being searched.firstResult- first result to return. Ignored if negative ornull.maxResults- maximum number of results to return. Ignored if negative ornull.- Returns:
- a non-null
Streamof online user sessions.
-
getUserSessionsStream
protected Stream<UserSessionModel> getUserSessionsStream(RealmModel realm, ClientModel client, Integer firstResult, Integer maxResults, boolean offline)
-
getUserSessionModels
protected Stream<UserSessionModel> getUserSessionModels(RealmModel realm, Integer firstResult, Integer maxResults, boolean offline, UserSessionPredicate predicate)
-
getUserSessionWithPredicate
public UserSessionModel getUserSessionWithPredicate(RealmModel realm, String id, boolean offline, Predicate<UserSessionModel> predicate)
Description copied from interface:UserSessionProviderReturn userSession of specified ID as long as the predicate passes. Otherwise returnsnull. If predicate doesn't pass, implementation can do some best-effort actions to try have predicate passing (eg. download userSession from other DC)- Specified by:
getUserSessionWithPredicatein interfaceUserSessionProvider
-
getActiveUserSessions
public long getActiveUserSessions(RealmModel realm, ClientModel client)
- Specified by:
getActiveUserSessionsin interfaceUserSessionProvider
-
getActiveClientSessionStats
public Map<String,Long> getActiveClientSessionStats(RealmModel realm, boolean offline)
Description copied from interface:UserSessionProviderReturns a summary of client sessions key is client.getId()- Specified by:
getActiveClientSessionStatsin interfaceUserSessionProvider- Returns:
-
getUserSessionsCount
protected long getUserSessionsCount(RealmModel realm, ClientModel client, boolean offline)
-
removeUserSession
public void removeUserSession(RealmModel realm, UserSessionModel session)
Description copied from interface:UserSessionProviderThis will remove attached ClientLoginSessionModels too- Specified by:
removeUserSessionin interfaceUserSessionProvider
-
removeUserSessions
public void removeUserSessions(RealmModel realm, UserModel user)
- Specified by:
removeUserSessionsin interfaceUserSessionProvider
-
removeUserSessions
protected void removeUserSessions(RealmModel realm, UserModel user, boolean offline)
-
removeAllExpired
public void removeAllExpired()
Description copied from interface:UserSessionProviderRemove expired user sessions and client sessions in all the realms- Specified by:
removeAllExpiredin interfaceUserSessionProvider
-
removeExpired
public void removeExpired(RealmModel realm)
Description copied from interface:UserSessionProviderRemoves expired user sessions owned by this realm from this provider. If this `UserSessionProvider` uses `UserSessionPersister`, the removal of the expireduser sessionsis also propagated to relevant `UserSessionPersister`.- Specified by:
removeExpiredin interfaceUserSessionProvider- Parameters:
realm-RealmModelRealm where all the expired user sessions to be removed from.
-
removeUserSessions
public void removeUserSessions(RealmModel realm)
- Specified by:
removeUserSessionsin interfaceUserSessionProvider
-
onRemoveUserSessionsEvent
protected void onRemoveUserSessionsEvent(String realmId)
-
removeLocalUserSessions
public void removeLocalUserSessions(String realmId, boolean offline)
-
onRealmRemoved
public void onRealmRemoved(RealmModel realm)
- Specified by:
onRealmRemovedin interfaceUserSessionProvider
-
onRealmRemovedEvent
protected void onRealmRemovedEvent(String realmId)
-
onClientRemoved
public void onClientRemoved(RealmModel realm, ClientModel client)
- Specified by:
onClientRemovedin interfaceUserSessionProvider
-
onUserRemoved
protected void onUserRemoved(RealmModel realm, UserModel user)
-
close
public void close()
- Specified by:
closein interfaceProvider- Specified by:
closein interfaceUserSessionProvider
-
getStartupTime
public int getStartupTime(RealmModel realm)
- Specified by:
getStartupTimein interfaceUserSessionProvider
-
removeUserSession
protected void removeUserSession(UserSessionEntity sessionEntity, boolean offline)
-
createOfflineUserSession
public UserSessionModel createOfflineUserSession(UserSessionModel userSession)
Description copied from interface:UserSessionProviderNewly created userSession won't contain attached AuthenticatedClientSessions- Specified by:
createOfflineUserSessionin interfaceUserSessionProvider
-
getOfflineUserSession
public UserSessionAdapter getOfflineUserSession(RealmModel realm, String userSessionId)
- Specified by:
getOfflineUserSessionin interfaceUserSessionProvider
-
getOfflineUserSessionByBrokerSessionId
public UserSessionModel getOfflineUserSessionByBrokerSessionId(RealmModel realm, String brokerSessionId)
- Specified by:
getOfflineUserSessionByBrokerSessionIdin interfaceUserSessionProvider
-
getOfflineUserSessionByBrokerUserIdStream
public Stream<UserSessionModel> getOfflineUserSessionByBrokerUserIdStream(RealmModel realm, String brokerUserId)
Description copied from interface:UserSessionProviderObtains the offline user sessions associated with the user that matches the specifiedbrokerUserId.- Specified by:
getOfflineUserSessionByBrokerUserIdStreamin interfaceUserSessionProvider- Parameters:
realm- a reference to the realm.brokerUserId- the id of the broker user whose sessions are being searched.- Returns:
- a non-null
Streamof offline user sessions.
-
removeOfflineUserSession
public void removeOfflineUserSession(RealmModel realm, UserSessionModel userSession)
Description copied from interface:UserSessionProviderRemoves the attached clientSessions as well- Specified by:
removeOfflineUserSessionin interfaceUserSessionProvider
-
createOfflineClientSession
public AuthenticatedClientSessionModel createOfflineClientSession(AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession)
Description copied from interface:UserSessionProviderWill automatically attach newly created offline client session to the offlineUserSession- Specified by:
createOfflineClientSessionin interfaceUserSessionProvider
-
getOfflineUserSessionsStream
public Stream<UserSessionModel> getOfflineUserSessionsStream(RealmModel realm, UserModel user)
Description copied from interface:UserSessionProviderObtains the offline user sessions associated with the specified user.- Specified by:
getOfflineUserSessionsStreamin interfaceUserSessionProvider- Parameters:
realm- a reference to the realm.user- the user whose offline sessions are being searched.- Returns:
- a non-null
Streamof offline user sessions.
-
getOfflineSessionsCount
public long getOfflineSessionsCount(RealmModel realm, ClientModel client)
- Specified by:
getOfflineSessionsCountin interfaceUserSessionProvider
-
getOfflineUserSessionsStream
public Stream<UserSessionModel> getOfflineUserSessionsStream(RealmModel realm, ClientModel client, Integer first, Integer max)
Description copied from interface:UserSessionProviderObtains the offline user sessions associated with the specified client, starting from thefirstResultand containing at mostmaxResults.- Specified by:
getOfflineUserSessionsStreamin interfaceUserSessionProvider- Parameters:
realm- a reference tot he realm.client- the client whose user sessions are being searched.first- first result to return. Ignored if negative ornull.max- maximum number of results to return. Ignored if negative ornull.- Returns:
- a non-null
Streamof offline user sessions.
-
importUserSessions
public void importUserSessions(Collection<UserSessionModel> persistentUserSessions, boolean offline)
Description copied from interface:UserSessionProviderTriggered by persister during pre-load. It imports authenticatedClientSessions too- Specified by:
importUserSessionsin interfaceUserSessionProvider
-
importUserSession
protected UserSessionAdapter importUserSession(UserSessionModel userSession, boolean offline)
-
-