keycloak
クラス | 公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 関数 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider クラス
org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider の継承関係図
Inheritance graph
org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider 連携図
Collaboration graph

クラス

class  RegisterClientSessionTask
 

公開メンバ関数

 InfinispanUserSessionProvider (KeycloakSession session, RemoteCacheInvoker remoteCacheInvoker, LastSessionRefreshStore lastSessionRefreshStore, LastSessionRefreshStore offlineLastSessionRefreshStore, InfinispanKeyGenerator keyGenerator, Cache< String, SessionEntityWrapper< UserSessionEntity >> sessionCache, Cache< String, SessionEntityWrapper< UserSessionEntity >> offlineSessionCache, Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity >> clientSessionCache, Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity >> offlineClientSessionCache, Cache< LoginFailureKey, SessionEntityWrapper< LoginFailureEntity >> loginFailureCache)
 
AuthenticatedClientSessionModel createClientSession (RealmModel realm, ClientModel client, UserSessionModel userSession)
 
UserSessionModel createUserSession (RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
 
UserSessionModel createUserSession (String id, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
 
UserSessionModel getUserSession (RealmModel realm, String id)
 
AuthenticatedClientSessionAdapter getClientSession (UserSessionModel userSession, ClientModel client, UUID clientSessionId, boolean offline)
 
List< UserSessionModelgetUserSessions (final RealmModel realm, UserModel user)
 
List< UserSessionModelgetUserSessionByBrokerUserId (RealmModel realm, String brokerUserId)
 
UserSessionModel getUserSessionByBrokerSessionId (RealmModel realm, String brokerSessionId)
 
List< UserSessionModelgetUserSessions (RealmModel realm, ClientModel client)
 
List< UserSessionModelgetUserSessions (RealmModel realm, ClientModel client, int firstResult, int maxResults)
 
UserSessionModel getUserSessionWithPredicate (RealmModel realm, String id, boolean offline, Predicate< UserSessionModel > predicate)
 
long getActiveUserSessions (RealmModel realm, ClientModel client)
 
Map< String, Long > getActiveClientSessionStats (RealmModel realm, boolean offline)
 
void removeUserSession (RealmModel realm, UserSessionModel session)
 
void removeUserSessions (RealmModel realm, UserModel user)
 
void removeExpired (RealmModel realm)
 
void removeUserSessions (RealmModel realm)
 
UserLoginFailureModel getUserLoginFailure (RealmModel realm, String userId)
 
UserLoginFailureModel addUserLoginFailure (RealmModel realm, String userId)
 
void removeUserLoginFailure (RealmModel realm, String userId)
 
void removeAllUserLoginFailures (RealmModel realm)
 
void onRealmRemoved (RealmModel realm)
 
void onClientRemoved (RealmModel realm, ClientModel client)
 
void close ()
 
UserSessionModel createOfflineUserSession (UserSessionModel userSession)
 
UserSessionAdapter getOfflineUserSession (RealmModel realm, String userSessionId)
 
void removeOfflineUserSession (RealmModel realm, UserSessionModel userSession)
 
AuthenticatedClientSessionModel createOfflineClientSession (AuthenticatedClientSessionModel clientSession, UserSessionModel offlineUserSession)
 
List< UserSessionModelgetOfflineUserSessions (RealmModel realm, UserModel user)
 
long getOfflineSessionsCount (RealmModel realm, ClientModel client)
 
List< UserSessionModelgetOfflineUserSessions (RealmModel realm, ClientModel client, int first, int max)
 
UserSessionAdapter importUserSession (UserSessionModel userSession, boolean offline, boolean importAuthenticatedClientSessions)
 

限定公開メンバ関数

Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache (boolean offline)
 
InfinispanChangelogBasedTransaction< String, UserSessionEntitygetTransaction (boolean offline)
 
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > getClientSessionCache (boolean offline)
 
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntitygetClientSessionTransaction (boolean offline)
 
LastSessionRefreshStore getLastSessionRefreshStore ()
 
LastSessionRefreshStore getOfflineLastSessionRefreshStore ()
 
UserSessionAdapter getUserSession (RealmModel realm, String id, boolean offline)
 
List< UserSessionModelgetUserSessions (RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
 
List< UserSessionModelgetUserSessions (final RealmModel realm, ClientModel client, int firstResult, int maxResults, final boolean offline)
 
List< UserSessionModelgetUserSessionModels (RealmModel realm, int firstResult, int maxResults, boolean offline, UserSessionPredicate predicate)
 
long getUserSessionsCount (RealmModel realm, ClientModel client, boolean offline)
 
void removeUserSessions (RealmModel realm, UserModel user, boolean offline)
 
void onRemoveUserSessionsEvent (String realmId)
 
void onRemoveAllUserLoginFailuresEvent (String realmId)
 
void onRealmRemovedEvent (String realmId)
 
void onClientRemovedEvent (String realmId, String clientUuid)
 
void onUserRemoved (RealmModel realm, UserModel user)
 
void removeUserSession (UserSessionEntity sessionEntity, boolean offline)
 

限定公開変数類

final KeycloakSession session
 
final Cache< String, SessionEntityWrapper< UserSessionEntity > > sessionCache
 
final Cache< String, SessionEntityWrapper< UserSessionEntity > > offlineSessionCache
 
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
 
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > offlineClientSessionCache
 
final Cache< LoginFailureKey, SessionEntityWrapper< LoginFailureEntity > > loginFailureCache
 
final InfinispanChangelogBasedTransaction< String, UserSessionEntitysessionTx
 
final InfinispanChangelogBasedTransaction< String, UserSessionEntityofflineSessionTx
 
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntityclientSessionTx
 
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntityofflineClientSessionTx
 
final InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntityloginFailuresTx
 
final SessionEventsSenderTransaction clusterEventsSenderTx
 
final LastSessionRefreshStore lastSessionRefreshStore
 
final LastSessionRefreshStore offlineLastSessionRefreshStore
 
final InfinispanKeyGenerator keyGenerator
 

関数

void updateSessionEntity (UserSessionEntity entity, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
 
InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntitygetLoginFailuresTx ()
 
UserSessionAdapter wrap (RealmModel realm, UserSessionEntity entity, boolean offline)
 
AuthenticatedClientSessionAdapter wrap (UserSessionModel userSession, ClientModel client, AuthenticatedClientSessionEntity entity, boolean offline)
 
UserLoginFailureModel wrap (LoginFailureKey key, LoginFailureEntity entity)
 
UserSessionEntity getUserSessionEntity (UserSessionModel userSession, boolean offline)
 

非公開メンバ関数

UserSessionEntity getUserSessionEntity (String id, boolean offline)
 
AuthenticatedClientSessionEntity getClientSessionEntity (UUID id, boolean offline)
 
void removeExpiredUserSessions (RealmModel realm)
 
void removeExpiredOfflineUserSessions (RealmModel realm)
 
void removeLocalUserSessions (String realmId, boolean offline)
 
LoginFailureEntity getLoginFailureEntity (LoginFailureKey key)
 
void removeAllLocalUserLoginFailuresEvent (String realmId)
 
AuthenticatedClientSessionAdapter importClientSession (UserSessionAdapter sessionToImportInto, AuthenticatedClientSessionModel clientSession, InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx, InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx, boolean offline)
 

静的非公開変数類

static final Logger log = Logger.getLogger(InfinispanUserSessionProvider.class)
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ InfinispanUserSessionProvider()

org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.InfinispanUserSessionProvider ( KeycloakSession  session,
RemoteCacheInvoker  remoteCacheInvoker,
LastSessionRefreshStore  lastSessionRefreshStore,
LastSessionRefreshStore  offlineLastSessionRefreshStore,
InfinispanKeyGenerator  keyGenerator,
Cache< String, SessionEntityWrapper< UserSessionEntity >>  sessionCache,
Cache< String, SessionEntityWrapper< UserSessionEntity >>  offlineSessionCache,
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity >>  clientSessionCache,
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity >>  offlineClientSessionCache,
Cache< LoginFailureKey, SessionEntityWrapper< LoginFailureEntity >>  loginFailureCache 
)
inline
117  {
118  this.session = session;
119 
120  this.sessionCache = sessionCache;
125 
126  this.sessionTx = new InfinispanChangelogBasedTransaction<>(session, sessionCache, remoteCacheInvoker);
127  this.offlineSessionTx = new InfinispanChangelogBasedTransaction<>(session, offlineSessionCache, remoteCacheInvoker);
128  this.clientSessionTx = new InfinispanChangelogBasedTransaction<>(session, clientSessionCache, remoteCacheInvoker);
129  this.offlineClientSessionTx = new InfinispanChangelogBasedTransaction<>(session, offlineClientSessionCache, remoteCacheInvoker);
130 
131  this.loginFailuresTx = new InfinispanChangelogBasedTransaction<>(session, loginFailureCache, remoteCacheInvoker);
132 
133  this.clusterEventsSenderTx = new SessionEventsSenderTransaction(session);
134 
137  this.keyGenerator = keyGenerator;
138 
139  session.getTransactionManager().enlistAfterCompletion(clusterEventsSenderTx);
140  session.getTransactionManager().enlistAfterCompletion(sessionTx);
141  session.getTransactionManager().enlistAfterCompletion(offlineSessionTx);
142  session.getTransactionManager().enlistAfterCompletion(clientSessionTx);
143  session.getTransactionManager().enlistAfterCompletion(offlineClientSessionTx);
144  session.getTransactionManager().enlistAfterCompletion(loginFailuresTx);
145  }
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > offlineSessionTx
Definition: InfinispanUserSessionProvider.java:96
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
final Cache< String, SessionEntityWrapper< UserSessionEntity > > offlineSessionCache
Definition: InfinispanUserSessionProvider.java:90
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > sessionTx
Definition: InfinispanUserSessionProvider.java:95
final Cache< LoginFailureKey, SessionEntityWrapper< LoginFailureEntity > > loginFailureCache
Definition: InfinispanUserSessionProvider.java:93
final SessionEventsSenderTransaction clusterEventsSenderTx
Definition: InfinispanUserSessionProvider.java:101
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > offlineClientSessionCache
Definition: InfinispanUserSessionProvider.java:92
final LastSessionRefreshStore offlineLastSessionRefreshStore
Definition: InfinispanUserSessionProvider.java:104
final InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntity > loginFailuresTx
Definition: InfinispanUserSessionProvider.java:99
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionTx
Definition: InfinispanUserSessionProvider.java:97
final Cache< String, SessionEntityWrapper< UserSessionEntity > > sessionCache
Definition: InfinispanUserSessionProvider.java:89
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > offlineClientSessionTx
Definition: InfinispanUserSessionProvider.java:98
final LastSessionRefreshStore lastSessionRefreshStore
Definition: InfinispanUserSessionProvider.java:103
final InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProvider.java:106

関数詳解

◆ addUserLoginFailure()

UserLoginFailureModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.addUserLoginFailure ( RealmModel  realm,
String  userId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

668  {
669  LoginFailureKey key = new LoginFailureKey(realm.getId(), userId);
670  LoginFailureEntity entity = new LoginFailureEntity();
671  entity.setRealmId(realm.getId());
672  entity.setUserId(userId);
673 
674  SessionUpdateTask<LoginFailureEntity> createLoginFailureTask = Tasks.addIfAbsentSync();
675  loginFailuresTx.addTask(key, createLoginFailureTask, entity);
676 
677  return wrap(key, entity);
678  }
final InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntity > loginFailuresTx
Definition: InfinispanUserSessionProvider.java:99
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ close()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.close ( )
inline

org.keycloak.models.UserSessionProviderを実装しています。

754  {
755  }

◆ createClientSession()

AuthenticatedClientSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.createClientSession ( RealmModel  realm,
ClientModel  client,
UserSessionModel  userSession 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

172  {
173  final UUID clientSessionId = keyGenerator.generateKeyUUID(session, clientSessionCache);
174  AuthenticatedClientSessionEntity entity = new AuthenticatedClientSessionEntity(clientSessionId);
175  entity.setRealmId(realm.getId());
176  entity.setTimestamp(Time.currentTime());
177 
178  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(false);
179  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(false);
180  AuthenticatedClientSessionAdapter adapter = new AuthenticatedClientSessionAdapter(session, this, entity, client, userSession, userSessionUpdateTx, clientSessionUpdateTx, false);
181 
182  SessionUpdateTask<AuthenticatedClientSessionEntity> createClientSessionTask = Tasks.addIfAbsentSync();
183  clientSessionUpdateTx.addTask(clientSessionId, createClientSessionTask, entity);
184 
185  SessionUpdateTask registerClientSessionTask = new RegisterClientSessionTask(client.getId(), clientSessionId);
186  userSessionUpdateTx.addTask(userSession.getId(), registerClientSessionTask);
187 
188  return adapter;
189  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
UUID generateKeyUUID(KeycloakSession session, Cache< UUID, ?> cache)
Definition: InfinispanKeyGenerator.java:50
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151
final InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProvider.java:106

◆ createOfflineClientSession()

AuthenticatedClientSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.createOfflineClientSession ( AuthenticatedClientSessionModel  clientSession,
UserSessionModel  offlineUserSession 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

822  {
823  UserSessionAdapter userSessionAdapter = (offlineUserSession instanceof UserSessionAdapter) ? (UserSessionAdapter) offlineUserSession :
824  getOfflineUserSession(offlineUserSession.getRealm(), offlineUserSession.getId());
825 
826  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(true);
827  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(true);
828  AuthenticatedClientSessionAdapter offlineClientSession = importClientSession(userSessionAdapter, clientSession, userSessionUpdateTx, clientSessionUpdateTx, true);
829 
830  // update timestamp to current time
831  offlineClientSession.setTimestamp(Time.currentTime());
832 
833  return offlineClientSession;
834  }
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
UserSessionAdapter getOfflineUserSession(RealmModel realm, String userSessionId)
Definition: InfinispanUserSessionProvider.java:807
AuthenticatedClientSessionAdapter importClientSession(UserSessionAdapter sessionToImportInto, AuthenticatedClientSessionModel clientSession, InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx, InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx, boolean offline)
Definition: InfinispanUserSessionProvider.java:915
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ createOfflineUserSession()

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.createOfflineUserSession ( UserSessionModel  userSession)
inline

org.keycloak.models.UserSessionProviderを実装しています。

795  {
796  UserSessionAdapter offlineUserSession = importUserSession(userSession, true, false);
797 
798  // started and lastSessionRefresh set to current time
799  int currentTime = Time.currentTime();
800  offlineUserSession.getEntity().setStarted(currentTime);
801  offlineUserSession.setLastSessionRefresh(currentTime);
802 
803  return offlineUserSession;
804  }
UserSessionAdapter importUserSession(UserSessionModel userSession, boolean offline, boolean importAuthenticatedClientSessions)
Definition: InfinispanUserSessionProvider.java:867

◆ createUserSession() [1/2]

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.createUserSession ( RealmModel  realm,
UserModel  user,
String  loginUsername,
String  ipAddress,
String  authMethod,
boolean  rememberMe,
String  brokerSessionId,
String  brokerUserId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

192  {
193  final String userSessionId = keyGenerator.generateKeyString(session, sessionCache);
194  return createUserSession(userSessionId, realm, user, loginUsername, ipAddress, authMethod, rememberMe, brokerSessionId, brokerUserId);
195  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
UserSessionModel createUserSession(RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
Definition: InfinispanUserSessionProvider.java:192
String generateKeyString(KeycloakSession session, Cache< String, ?> cache)
Definition: InfinispanKeyGenerator.java:45
final Cache< String, SessionEntityWrapper< UserSessionEntity > > sessionCache
Definition: InfinispanUserSessionProvider.java:89
final InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProvider.java:106

◆ createUserSession() [2/2]

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.createUserSession ( String  id,
RealmModel  realm,
UserModel  user,
String  loginUsername,
String  ipAddress,
String  authMethod,
boolean  rememberMe,
String  brokerSessionId,
String  brokerUserId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

198  {
199  UserSessionEntity entity = new UserSessionEntity();
200  entity.setId(id);
201  updateSessionEntity(entity, realm, user, loginUsername, ipAddress, authMethod, rememberMe, brokerSessionId, brokerUserId);
202 
203  SessionUpdateTask<UserSessionEntity> createSessionTask = Tasks.addIfAbsentSync();
204  sessionTx.addTask(id, createSessionTask, entity);
205 
206  return wrap(realm, entity, false);
207  }
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > sessionTx
Definition: InfinispanUserSessionProvider.java:95
void updateSessionEntity(UserSessionEntity entity, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
Definition: InfinispanUserSessionProvider.java:209
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getActiveClientSessionStats()

Map<String, Long> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getActiveClientSessionStats ( RealmModel  realm,
boolean  offline 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

412  {
413  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
414  cache = CacheDecorators.skipCacheLoaders(cache);
415  return cache.entrySet().stream()
416  .filter(UserSessionPredicate.create(realm.getId()))
417  .map(Mappers.authClientSessionSetMapper())
418  .flatMap((Serializable & Function<Set<String>, Stream<? extends String>>)Mappers::toStream)
419  .collect(
420  CacheCollectors.serializableCollector(
421  () -> Collectors.groupingBy(Function.identity(), Collectors.counting())
422  )
423  );
424  }
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
static< T > Stream< T > toStream(Collection< T > collection)
Definition: Mappers.java:143

◆ getActiveUserSessions()

long org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getActiveUserSessions ( RealmModel  realm,
ClientModel  client 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

407  {
408  return getUserSessionsCount(realm, client, false);
409  }
long getUserSessionsCount(RealmModel realm, ClientModel client, boolean offline)
Definition: InfinispanUserSessionProvider.java:426

◆ getCache()

Cache<String, SessionEntityWrapper<UserSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getCache ( boolean  offline)
inlineprotected
147  {
148  return offline ? offlineSessionCache : sessionCache;
149  }
final Cache< String, SessionEntityWrapper< UserSessionEntity > > offlineSessionCache
Definition: InfinispanUserSessionProvider.java:90
final Cache< String, SessionEntityWrapper< UserSessionEntity > > sessionCache
Definition: InfinispanUserSessionProvider.java:89

◆ getClientSession()

AuthenticatedClientSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getClientSession ( UserSessionModel  userSession,
ClientModel  client,
UUID  clientSessionId,
boolean  offline 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

267  {
268  AuthenticatedClientSessionEntity entity = getClientSessionEntity(clientSessionId, offline);
269  return wrap(userSession, client, entity, offline);
270  }
AuthenticatedClientSessionEntity getClientSessionEntity(UUID id, boolean offline)
Definition: InfinispanUserSessionProvider.java:272
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getClientSessionCache()

Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getClientSessionCache ( boolean  offline)
inlineprotected
155  {
157  }
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > offlineClientSessionCache
Definition: InfinispanUserSessionProvider.java:92

◆ getClientSessionEntity()

AuthenticatedClientSessionEntity org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getClientSessionEntity ( UUID  id,
boolean  offline 
)
inlineprivate
272  {
273  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> tx = getClientSessionTransaction(offline);
274  SessionEntityWrapper<AuthenticatedClientSessionEntity> entityWrapper = tx.get(id);
275  return entityWrapper == null ? null : entityWrapper.getEntity();
276  }
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159

◆ getClientSessionTransaction()

InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getClientSessionTransaction ( boolean  offline)
inlineprotected
159  {
160  return offline ? offlineClientSessionTx : clientSessionTx;
161  }
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionTx
Definition: InfinispanUserSessionProvider.java:97
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > offlineClientSessionTx
Definition: InfinispanUserSessionProvider.java:98

◆ getLastSessionRefreshStore()

LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getLastSessionRefreshStore ( )
inlineprotected
163  {
165  }
final LastSessionRefreshStore lastSessionRefreshStore
Definition: InfinispanUserSessionProvider.java:103

◆ getLoginFailureEntity()

LoginFailureEntity org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getLoginFailureEntity ( LoginFailureKey  key)
inlineprivate
661  {
662  InfinispanChangelogBasedTransaction<LoginFailureKey, LoginFailureEntity> tx = getLoginFailuresTx();
663  SessionEntityWrapper<LoginFailureEntity> entityWrapper = tx.get(key);
664  return entityWrapper==null ? null : entityWrapper.getEntity();
665  }
InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntity > getLoginFailuresTx()
Definition: InfinispanUserSessionProvider.java:765

◆ getLoginFailuresTx()

InfinispanChangelogBasedTransaction<LoginFailureKey, LoginFailureEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getLoginFailuresTx ( )
inlinepackage
765  {
766  return loginFailuresTx;
767  }
final InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntity > loginFailuresTx
Definition: InfinispanUserSessionProvider.java:99

◆ getOfflineLastSessionRefreshStore()

LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getOfflineLastSessionRefreshStore ( )
inlineprotected
167  {
169  }
final LastSessionRefreshStore offlineLastSessionRefreshStore
Definition: InfinispanUserSessionProvider.java:104

◆ getOfflineSessionsCount()

long org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getOfflineSessionsCount ( RealmModel  realm,
ClientModel  client 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

857  {
858  return getUserSessionsCount(realm, client, true);
859  }
long getUserSessionsCount(RealmModel realm, ClientModel client, boolean offline)
Definition: InfinispanUserSessionProvider.java:426

◆ getOfflineUserSession()

UserSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getOfflineUserSession ( RealmModel  realm,
String  userSessionId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

807  {
808  return getUserSession(realm, userSessionId, true);
809  }
UserSessionModel getUserSession(RealmModel realm, String id)
Definition: InfinispanUserSessionProvider.java:229

◆ getOfflineUserSessions() [1/2]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getOfflineUserSessions ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

837  {
838  List<UserSessionModel> userSessions = new LinkedList<>();
839 
840  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = CacheDecorators.skipCacheLoaders(offlineSessionCache);
841 
842  Iterator<UserSessionEntity> itr = cache.entrySet().stream()
843  .filter(UserSessionPredicate.create(realm.getId()).user(user.getId()))
844  .map(Mappers.userSessionEntity())
845  .iterator();
846 
847  while (itr.hasNext()) {
848  UserSessionEntity userSessionEntity = itr.next();
849  UserSessionModel userSession = wrap(realm, userSessionEntity, true);
850  userSessions.add(userSession);
851  }
852 
853  return userSessions;
854  }
final Cache< String, SessionEntityWrapper< UserSessionEntity > > offlineSessionCache
Definition: InfinispanUserSessionProvider.java:90
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getOfflineUserSessions() [2/2]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getOfflineUserSessions ( RealmModel  realm,
ClientModel  client,
int  first,
int  max 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

862  {
863  return getUserSessions(realm, client, first, max, true);
864  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getTransaction()

InfinispanChangelogBasedTransaction<String, UserSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getTransaction ( boolean  offline)
inlineprotected
151  {
152  return offline ? offlineSessionTx : sessionTx;
153  }
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > offlineSessionTx
Definition: InfinispanUserSessionProvider.java:96
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > sessionTx
Definition: InfinispanUserSessionProvider.java:95

◆ getUserLoginFailure()

UserLoginFailureModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserLoginFailure ( RealmModel  realm,
String  userId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

655  {
656  LoginFailureKey key = new LoginFailureKey(realm.getId(), userId);
657  LoginFailureEntity entity = getLoginFailureEntity(key);
658  return wrap(key, entity);
659  }
LoginFailureEntity getLoginFailureEntity(LoginFailureKey key)
Definition: InfinispanUserSessionProvider.java:661
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getUserSession() [1/2]

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSession ( RealmModel  realm,
String  id 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

229  {
230  return getUserSession(realm, id, false);
231  }
UserSessionModel getUserSession(RealmModel realm, String id)
Definition: InfinispanUserSessionProvider.java:229

◆ getUserSession() [2/2]

UserSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSession ( RealmModel  realm,
String  id,
boolean  offline 
)
inlineprotected
233  {
234  UserSessionEntity entity = getUserSessionEntity(id, offline);
235  return wrap(realm, entity, offline);
236  }
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769
UserSessionEntity getUserSessionEntity(String id, boolean offline)
Definition: InfinispanUserSessionProvider.java:238

◆ getUserSessionByBrokerSessionId()

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionByBrokerSessionId ( RealmModel  realm,
String  brokerSessionId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

290  {
291  List<UserSessionModel> userSessions = getUserSessions(realm, UserSessionPredicate.create(realm.getId()).brokerSessionId(brokerSessionId), false);
292  return userSessions.isEmpty() ? null : userSessions.get(0);
293  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getUserSessionByBrokerUserId()

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionByBrokerUserId ( RealmModel  realm,
String  brokerUserId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

285  {
286  return getUserSessions(realm, UserSessionPredicate.create(realm.getId()).brokerUserId(brokerUserId), false);
287  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getUserSessionEntity() [1/2]

UserSessionEntity org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionEntity ( String  id,
boolean  offline 
)
inlineprivate
238  {
239  InfinispanChangelogBasedTransaction<String, UserSessionEntity> tx = getTransaction(offline);
240  SessionEntityWrapper<UserSessionEntity> entityWrapper = tx.get(id);
241  return entityWrapper==null ? null : entityWrapper.getEntity();
242  }
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ getUserSessionEntity() [2/2]

UserSessionEntity org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionEntity ( UserSessionModel  userSession,
boolean  offline 
)
inlinepackage
785  {
786  if (userSession instanceof UserSessionAdapter) {
787  return ((UserSessionAdapter) userSession).getEntity();
788  } else {
789  return getUserSessionEntity(userSession.getId(), offline);
790  }
791  }
UserSessionEntity getUserSessionEntity(String id, boolean offline)
Definition: InfinispanUserSessionProvider.java:238

◆ getUserSessionModels()

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionModels ( RealmModel  realm,
int  firstResult,
int  maxResults,
boolean  offline,
UserSessionPredicate  predicate 
)
inlineprotected
312  {
313  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
314  cache = CacheDecorators.skipCacheLoaders(cache);
315 
316  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache = getClientSessionCache(offline);
317  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCacheDecorated = CacheDecorators.skipCacheLoaders(clientSessionCache);
318 
319  Stream<UserSessionEntity> stream = cache.entrySet().stream()
320  .filter(predicate)
321  .map(Mappers.userSessionEntity())
322  .sorted(Comparators.userSessionLastSessionRefresh());
323 
324  if (firstResult > 0) {
325  stream = stream.skip(firstResult);
326  }
327 
328  if (maxResults > 0) {
329  stream = stream.limit(maxResults);
330  }
331 
332  final List<UserSessionModel> sessions = new LinkedList<>();
333  Iterator<UserSessionEntity> itr = stream.iterator();
334 
335  while (itr.hasNext()) {
336  UserSessionEntity userSessionEntity = itr.next();
337  sessions.add(wrap(realm, userSessionEntity, offline));
338  }
339 
340 
341  return sessions;
342  }
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > getClientSessionCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:155
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getUserSessions() [1/5]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessions ( RealmModel  realm,
Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>>  predicate,
boolean  offline 
)
inlineprotected
245  {
246  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
247 
248  cache = CacheDecorators.skipCacheLoaders(cache);
249 
250  Stream<Map.Entry<String, SessionEntityWrapper<UserSessionEntity>>> cacheStream = cache.entrySet().stream();
251 
252  List<UserSessionModel> resultSessions = new LinkedList<>();
253 
254  Iterator<UserSessionEntity> itr = cacheStream.filter(predicate)
255  .map(Mappers.userSessionEntity())
256  .iterator();
257 
258  while (itr.hasNext()) {
259  UserSessionEntity userSessionEntity = itr.next();
260  resultSessions.add(wrap(realm, userSessionEntity, offline));
261  }
262 
263  return resultSessions;
264  }
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769

◆ getUserSessions() [2/5]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessions ( final RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

280  {
281  return getUserSessions(realm, UserSessionPredicate.create(realm.getId()).user(user.getId()), false);
282  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getUserSessions() [3/5]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessions ( RealmModel  realm,
ClientModel  client 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

296  {
297  return getUserSessions(realm, client, -1, -1);
298  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getUserSessions() [4/5]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessions ( RealmModel  realm,
ClientModel  client,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

301  {
302  return getUserSessions(realm, client, firstResult, maxResults, false);
303  }
List< UserSessionModel > getUserSessions(RealmModel realm, Predicate< Map.Entry< String, SessionEntityWrapper< UserSessionEntity >>> predicate, boolean offline)
Definition: InfinispanUserSessionProvider.java:245

◆ getUserSessions() [5/5]

List<UserSessionModel> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessions ( final RealmModel  realm,
ClientModel  client,
int  firstResult,
int  maxResults,
final boolean  offline 
)
inlineprotected
305  {
306  final String clientUuid = client.getId();
307  UserSessionPredicate predicate = UserSessionPredicate.create(realm.getId()).client(clientUuid);
308 
309  return getUserSessionModels(realm, firstResult, maxResults, offline, predicate);
310  }
List< UserSessionModel > getUserSessionModels(RealmModel realm, int firstResult, int maxResults, boolean offline, UserSessionPredicate predicate)
Definition: InfinispanUserSessionProvider.java:312

◆ getUserSessionsCount()

long org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionsCount ( RealmModel  realm,
ClientModel  client,
boolean  offline 
)
inlineprotected
426  {
427  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
428  cache = CacheDecorators.skipCacheLoaders(cache);
429 
430  final String clientUuid = client.getId();
431 
432  return cache.entrySet().stream()
433  .filter(UserSessionPredicate.create(realm.getId()).client(clientUuid))
434  .count();
435  }
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147

◆ getUserSessionWithPredicate()

UserSessionModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.getUserSessionWithPredicate ( RealmModel  realm,
String  id,
boolean  offline,
Predicate< UserSessionModel predicate 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

345  {
346  UserSessionModel userSession = getUserSession(realm, id, offline);
347  if (userSession == null) {
348  return null;
349  }
350 
351  // We have userSession, which passes predicate. No need for remote lookup.
352  if (predicate.test(userSession)) {
353  log.debugf("getUserSessionWithPredicate(%s): found in local cache", id);
354  return userSession;
355  }
356 
357  // Try lookup userSession from remoteCache
358  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
359  RemoteCache remoteCache = InfinispanUtil.getRemoteCache(cache);
360 
361  if (remoteCache != null) {
362  SessionEntityWrapper<UserSessionEntity> remoteSessionEntityWrapper = (SessionEntityWrapper<UserSessionEntity>) remoteCache.get(id);
363  if (remoteSessionEntityWrapper != null) {
364  UserSessionEntity remoteSessionEntity = remoteSessionEntityWrapper.getEntity();
365  log.debugf("getUserSessionWithPredicate(%s): remote cache contains session entity %s", id, remoteSessionEntity);
366 
367  UserSessionModel remoteSessionAdapter = wrap(realm, remoteSessionEntity, offline);
368  if (predicate.test(remoteSessionAdapter)) {
369 
370  InfinispanChangelogBasedTransaction<String, UserSessionEntity> tx = getTransaction(offline);
371 
372  // Remote entity contains our predicate. Update local cache with the remote entity
373  SessionEntityWrapper<UserSessionEntity> sessionWrapper = remoteSessionEntity.mergeRemoteEntityWithLocalEntity(tx.get(id));
374 
375  // Replace entity just in ispn cache. Skip remoteStore
376  cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE, Flag.SKIP_CACHE_LOAD, Flag.IGNORE_RETURN_VALUES)
377  .replace(id, sessionWrapper);
378 
379  tx.reloadEntityInCurrentTransaction(realm, id, sessionWrapper);
380 
381  // Recursion. We should have it locally now
382  return getUserSessionWithPredicate(realm, id, offline, predicate);
383  } else {
384  log.debugf("getUserSessionWithPredicate(%s): found, but predicate doesn't pass", id);
385 
386  return null;
387  }
388  } else {
389  log.debugf("getUserSessionWithPredicate(%s): not found", id);
390 
391  // Session not available on remoteCache. Was already removed there. So removing locally too.
392  // TODO: Can be optimized to skip calling remoteCache.remove
393  removeUserSession(realm, userSession);
394 
395  return null;
396  }
397  } else {
398 
399  log.debugf("getUserSessionWithPredicate(%s): remote cache not available", id);
400 
401  return null;
402  }
403  }
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
UserSessionModel getUserSession(RealmModel realm, String id)
Definition: InfinispanUserSessionProvider.java:229
static final Logger log
Definition: InfinispanUserSessionProvider.java:85
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151
void removeUserSession(RealmModel realm, UserSessionModel session)
Definition: InfinispanUserSessionProvider.java:438
UserSessionModel getUserSessionWithPredicate(RealmModel realm, String id, boolean offline, Predicate< UserSessionModel > predicate)
Definition: InfinispanUserSessionProvider.java:345

◆ importClientSession()

AuthenticatedClientSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.importClientSession ( UserSessionAdapter  sessionToImportInto,
AuthenticatedClientSessionModel  clientSession,
InfinispanChangelogBasedTransaction< String, UserSessionEntity userSessionUpdateTx,
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity clientSessionUpdateTx,
boolean  offline 
)
inlineprivate
918  {
919  final UUID clientSessionId = keyGenerator.generateKeyUUID(session, getClientSessionCache(offline));
920  AuthenticatedClientSessionEntity entity = new AuthenticatedClientSessionEntity(clientSessionId);
921  entity.setRealmId(sessionToImportInto.getRealm().getId());
922 
923  entity.setAction(clientSession.getAction());
924  entity.setAuthMethod(clientSession.getProtocol());
925 
926  entity.setNotes(clientSession.getNotes() == null ? new ConcurrentHashMap<>() : clientSession.getNotes());
927  entity.setRedirectUri(clientSession.getRedirectUri());
928  entity.setTimestamp(clientSession.getTimestamp());
929 
930  SessionUpdateTask<AuthenticatedClientSessionEntity> createClientSessionTask = Tasks.addIfAbsentSync();
931  clientSessionUpdateTx.addTask(entity.getId(), createClientSessionTask, entity);
932 
933  AuthenticatedClientSessionStore clientSessions = sessionToImportInto.getEntity().getAuthenticatedClientSessions();
934  clientSessions.put(clientSession.getClient().getId(), clientSessionId);
935 
936  SessionUpdateTask registerClientSessionTask = new RegisterClientSessionTask(clientSession.getClient().getId(), clientSessionId);
937  userSessionUpdateTx.addTask(sessionToImportInto.getId(), registerClientSessionTask);
938 
939  return new AuthenticatedClientSessionAdapter(session,this, entity, clientSession.getClient(), sessionToImportInto, userSessionUpdateTx, clientSessionUpdateTx, offline);
940  }
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > getClientSessionCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:155
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
UUID generateKeyUUID(KeycloakSession session, Cache< UUID, ?> cache)
Definition: InfinispanKeyGenerator.java:50
final InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProvider.java:106

◆ importUserSession()

UserSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.importUserSession ( UserSessionModel  userSession,
boolean  offline,
boolean  importAuthenticatedClientSessions 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

867  {
868  UserSessionEntity entity = new UserSessionEntity();
869  entity.setId(userSession.getId());
870  entity.setRealmId(userSession.getRealm().getId());
871 
872  entity.setAuthMethod(userSession.getAuthMethod());
873  entity.setBrokerSessionId(userSession.getBrokerSessionId());
874  entity.setBrokerUserId(userSession.getBrokerUserId());
875  entity.setIpAddress(userSession.getIpAddress());
876  entity.setNotes(userSession.getNotes() == null ? new ConcurrentHashMap<>() : userSession.getNotes());
877  entity.setAuthenticatedClientSessions(new AuthenticatedClientSessionStore());
878  entity.setRememberMe(userSession.isRememberMe());
879  entity.setState(userSession.getState());
880  if (userSession instanceof OfflineUserSessionModel) {
881  // this is a hack so that UserModel doesn't have to be available when offline token is imported.
882  // see related JIRA - KEYCLOAK-5350 and corresponding test
883  OfflineUserSessionModel oline = (OfflineUserSessionModel)userSession;
884  entity.setUser(oline.getUserId());
885  // NOTE: Hack
886  // We skip calling entity.setLoginUsername(userSession.getLoginUsername())
887 
888  } else {
889  entity.setLoginUsername(userSession.getLoginUsername());
890  entity.setUser(userSession.getUser().getId());
891  }
892 
893  entity.setStarted(userSession.getStarted());
894  entity.setLastSessionRefresh(userSession.getLastSessionRefresh());
895 
896  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(offline);
897  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(offline);
898 
899  SessionUpdateTask<UserSessionEntity> importTask = Tasks.addIfAbsentSync();
900  userSessionUpdateTx.addTask(userSession.getId(), importTask, entity);
901 
902  UserSessionAdapter importedSession = wrap(userSession.getRealm(), entity, offline);
903 
904  // Handle client sessions
905  if (importAuthenticatedClientSessions) {
906  for (AuthenticatedClientSessionModel clientSession : userSession.getAuthenticatedClientSessions().values()) {
907  importClientSession(importedSession, clientSession, userSessionUpdateTx, clientSessionUpdateTx, offline);
908  }
909  }
910 
911  return importedSession;
912  }
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
AuthenticatedClientSessionAdapter importClientSession(UserSessionAdapter sessionToImportInto, AuthenticatedClientSessionModel clientSession, InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx, InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx, boolean offline)
Definition: InfinispanUserSessionProvider.java:915
UserSessionAdapter wrap(RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: InfinispanUserSessionProvider.java:769
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ onClientRemoved()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onClientRemoved ( RealmModel  realm,
ClientModel  client 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

735  {
736 // clusterEventsSenderTx.addEvent(
737 // ClientRemovedSessionEvent.createEvent(ClientRemovedSessionEvent.class, InfinispanUserSessionProviderFactory.CLIENT_REMOVED_SESSION_EVENT, session, realm.getId(), true),
738 // ClusterProvider.DCNotify.LOCAL_DC_ONLY);
739  }

◆ onClientRemovedEvent()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onClientRemovedEvent ( String  realmId,
String  clientUuid 
)
inlineprotected
741  {
742  // Nothing for now. userSession.getAuthenticatedClientSessions() will check lazily if particular client exists and update userSession on-the-fly.
743  }

◆ onRealmRemoved()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onRealmRemoved ( RealmModel  realm)
inline

org.keycloak.models.UserSessionProviderを実装しています。

721  {
722  // Don't send message to all DCs, just to all cluster nodes in current DC. The remoteCache will notify client listeners for removed userSessions.
724  RealmRemovedSessionEvent.createEvent(RealmRemovedSessionEvent.class, InfinispanUserSessionProviderFactory.REALM_REMOVED_SESSION_EVENT, session, realm.getId(), true),
725  ClusterProvider.DCNotify.LOCAL_DC_ONLY);
726  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
final SessionEventsSenderTransaction clusterEventsSenderTx
Definition: InfinispanUserSessionProvider.java:101
void addEvent(SessionClusterEvent event, ClusterProvider.DCNotify dcNotify)
Definition: SessionEventsSenderTransaction.java:42

◆ onRealmRemovedEvent()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onRealmRemovedEvent ( String  realmId)
inlineprotected
728  {
729  removeLocalUserSessions(realmId, true);
730  removeLocalUserSessions(realmId, false);
732  }
void removeLocalUserSessions(String realmId, boolean offline)
Definition: InfinispanUserSessionProvider.java:614
void removeAllLocalUserLoginFailuresEvent(String realmId)
Definition: InfinispanUserSessionProvider.java:697

◆ onRemoveAllUserLoginFailuresEvent()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onRemoveAllUserLoginFailuresEvent ( String  realmId)
inlineprotected
693  {
695  }
void removeAllLocalUserLoginFailuresEvent(String realmId)
Definition: InfinispanUserSessionProvider.java:697

◆ onRemoveUserSessionsEvent()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onRemoveUserSessionsEvent ( String  realmId)
inlineprotected
610  {
611  removeLocalUserSessions(realmId, false);
612  }
void removeLocalUserSessions(String realmId, boolean offline)
Definition: InfinispanUserSessionProvider.java:614

◆ onUserRemoved()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.onUserRemoved ( RealmModel  realm,
UserModel  user 
)
inlineprotected
746  {
747  removeUserSessions(realm, user, true);
748  removeUserSessions(realm, user, false);
749 
750  removeUserLoginFailure(realm, user.getId());
751  }
void removeUserSessions(RealmModel realm, UserModel user)
Definition: InfinispanUserSessionProvider.java:446
void removeUserLoginFailure(RealmModel realm, String userId)
Definition: InfinispanUserSessionProvider.java:681

◆ removeAllLocalUserLoginFailuresEvent()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeAllLocalUserLoginFailuresEvent ( String  realmId)
inlineprivate
697  {
698  FuturesHelper futures = new FuturesHelper();
699 
700  Cache<LoginFailureKey, SessionEntityWrapper<LoginFailureEntity>> localCache = CacheDecorators.localCache(loginFailureCache);
701 
702  Cache<LoginFailureKey, SessionEntityWrapper<LoginFailureEntity>> localCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localCache);
703 
704  localCacheStoreIgnore
705  .entrySet()
706  .stream()
707  .filter(UserLoginFailurePredicate.create(realmId))
708  .map(Mappers.loginFailureId())
709  .forEach(loginFailureKey -> {
710  // Remove loginFailure from remoteCache too. Use removeAsync for better perf
711  Future future = localCache.removeAsync(loginFailureKey);
712  futures.addTask(future);
713  });
714 
715  futures.waitForAllToFinish();
716 
717  log.debugf("Removed %d login failures in realm %s", futures.size(), realmId);
718  }
final Cache< LoginFailureKey, SessionEntityWrapper< LoginFailureEntity > > loginFailureCache
Definition: InfinispanUserSessionProvider.java:93
static final Logger log
Definition: InfinispanUserSessionProvider.java:85

◆ removeAllUserLoginFailures()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeAllUserLoginFailures ( RealmModel  realm)
inline

org.keycloak.models.UserSessionProviderを実装しています。

687  {
689  RemoveAllUserLoginFailuresEvent.createEvent(RemoveAllUserLoginFailuresEvent.class, InfinispanUserSessionProviderFactory.REMOVE_ALL_LOGIN_FAILURES_EVENT, session, realm.getId(), true),
690  ClusterProvider.DCNotify.LOCAL_DC_ONLY);
691  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
final SessionEventsSenderTransaction clusterEventsSenderTx
Definition: InfinispanUserSessionProvider.java:101
void addEvent(SessionClusterEvent event, ClusterProvider.DCNotify dcNotify)
Definition: SessionEventsSenderTransaction.java:42

◆ removeExpired()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeExpired ( RealmModel  realm)
inline

org.keycloak.models.UserSessionProviderを実装しています。

464  {
465  log.debugf("Removing expired sessions");
468  }
void removeExpiredUserSessions(RealmModel realm)
Definition: InfinispanUserSessionProvider.java:470
void removeExpiredOfflineUserSessions(RealmModel realm)
Definition: InfinispanUserSessionProvider.java:534
static final Logger log
Definition: InfinispanUserSessionProvider.java:85

◆ removeExpiredOfflineUserSessions()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeExpiredOfflineUserSessions ( RealmModel  realm)
inlineprivate
534  {
535  UserSessionPersisterProvider persister = session.getProvider(UserSessionPersisterProvider.class);
536  int expiredOffline = Time.currentTime() - realm.getOfflineSessionIdleTimeout() - SessionTimeoutHelper.PERIODIC_CLEANER_IDLE_TIMEOUT_WINDOW_SECONDS;
537 
538  // Each cluster node cleanups just local sessions, which are those owned by himself (+ few more taking l1 cache into account)
539  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCache = CacheDecorators.localCache(offlineSessionCache);
540 
541  UserSessionPredicate predicate = UserSessionPredicate.create(realm.getId()).expired(null, expiredOffline);
542 
543  FuturesHelper futures = new FuturesHelper();
544 
545  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localCache);
546 
547  final AtomicInteger userSessionsSize = new AtomicInteger();
548  final AtomicInteger clientSessionsSize = new AtomicInteger();
549 
550  // Ignore remoteStore for stream iteration. But we will invoke remoteStore for userSession removal propagate
551  localCacheStoreIgnore
552  .entrySet()
553  .stream()
554  .filter(predicate)
555  .map(Mappers.userSessionEntity())
556  .forEach(new Consumer<UserSessionEntity>() {
557 
558  @Override
559  public void accept(UserSessionEntity userSessionEntity) {
560  userSessionsSize.incrementAndGet();
561 
562  Future future = offlineSessionCache.removeAsync(userSessionEntity.getId());
563  futures.addTask(future);
564  userSessionEntity.getAuthenticatedClientSessions().forEach((clientUUID, clientSessionId) -> {
565  clientSessionsSize.incrementAndGet();
566  Future f = offlineClientSessionCache.removeAsync(clientSessionId);
567  futures.addTask(f);
568  });
569 
570  // TODO:mposolda can be likely optimized to delete all expired at one step
571  persister.removeUserSession( userSessionEntity.getId(), true);
572  }
573  });
574 
575  // Removing detached clientSessions. Ignore remoteStore for stream iteration. But we will invoke remoteStore for clientSession removal propagate
576  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> localClientSessionCache = CacheDecorators.localCache(offlineClientSessionCache);
577  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> localClientSessionCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localClientSessionCache);
578 
579  localClientSessionCacheStoreIgnore
580  .entrySet()
581  .stream()
582  .filter(AuthenticatedClientSessionPredicate.create(realm.getId()).expired(expiredOffline))
583  .map(Mappers.clientSessionEntity())
584  .forEach(new Consumer<AuthenticatedClientSessionEntity>() {
585 
586  @Override
587  public void accept(AuthenticatedClientSessionEntity clientSessionEntity) {
588  clientSessionsSize.incrementAndGet();
589 
590  Future future = offlineClientSessionCache.removeAsync(clientSessionEntity.getId());
591  futures.addTask(future);
592  }
593 
594  });
595 
596  futures.waitForAllToFinish();
597 
598  log.debugf("Removed %d expired offline user sessions and %d expired offline client sessions for realm '%s'",
599  userSessionsSize.get(), clientSessionsSize.get(), realm.getName());
600  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
final Cache< String, SessionEntityWrapper< UserSessionEntity > > offlineSessionCache
Definition: InfinispanUserSessionProvider.java:90
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > offlineClientSessionCache
Definition: InfinispanUserSessionProvider.java:92
< T extends Provider > T getProvider(Class< T > clazz)
static final Logger log
Definition: InfinispanUserSessionProvider.java:85

◆ removeExpiredUserSessions()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeExpiredUserSessions ( RealmModel  realm)
inlineprivate
470  {
471  int expired = Time.currentTime() - realm.getSsoSessionMaxLifespan();
472  int expiredRefresh = Time.currentTime() - realm.getSsoSessionIdleTimeout() - SessionTimeoutHelper.PERIODIC_CLEANER_IDLE_TIMEOUT_WINDOW_SECONDS;
473 
474  FuturesHelper futures = new FuturesHelper();
475 
476  // Each cluster node cleanups just local sessions, which are those owned by itself (+ few more taking l1 cache into account)
477  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCache = CacheDecorators.localCache(sessionCache);
478  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localCache);
479 
480  final AtomicInteger userSessionsSize = new AtomicInteger();
481  final AtomicInteger clientSessionsSize = new AtomicInteger();
482 
483  // Ignore remoteStore for stream iteration. But we will invoke remoteStore for userSession removal propagate
484  localCacheStoreIgnore
485  .entrySet()
486  .stream()
487  .filter(UserSessionPredicate.create(realm.getId()).expired(expired, expiredRefresh))
488  .map(Mappers.userSessionEntity())
489  .forEach(new Consumer<UserSessionEntity>() {
490 
491  @Override
492  public void accept(UserSessionEntity userSessionEntity) {
493  userSessionsSize.incrementAndGet();
494 
495  Future future = sessionCache.removeAsync(userSessionEntity.getId());
496  futures.addTask(future);
497 
498  userSessionEntity.getAuthenticatedClientSessions().forEach((clientUUID, clientSessionId) -> {
499  clientSessionsSize.incrementAndGet();
500  Future f = clientSessionCache.removeAsync(clientSessionId);
501  futures.addTask(f);
502  });
503  }
504 
505  });
506 
507  // Removing detached clientSessions. Ignore remoteStore for stream iteration. But we will invoke remoteStore for clientSession removal propagate
508  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> localClientSessionCache = CacheDecorators.localCache(clientSessionCache);
509  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> localClientSessionCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localClientSessionCache);
510 
511  localClientSessionCacheStoreIgnore
512  .entrySet()
513  .stream()
514  .filter(AuthenticatedClientSessionPredicate.create(realm.getId()).expired(expired))
515  .map(Mappers.clientSessionEntity())
516  .forEach(new Consumer<AuthenticatedClientSessionEntity>() {
517 
518  @Override
519  public void accept(AuthenticatedClientSessionEntity clientSessionEntity) {
520  clientSessionsSize.incrementAndGet();
521 
522  Future future = clientSessionCache.removeAsync(clientSessionEntity.getId());
523  futures.addTask(future);
524  }
525 
526  });
527 
528  futures.waitForAllToFinish();
529 
530  log.debugf("Removed %d expired user sessions and %d expired client sessions for realm '%s'", userSessionsSize.get(),
531  clientSessionsSize.get(), realm.getName());
532  }
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
static final Logger log
Definition: InfinispanUserSessionProvider.java:85
final Cache< String, SessionEntityWrapper< UserSessionEntity > > sessionCache
Definition: InfinispanUserSessionProvider.java:89

◆ removeLocalUserSessions()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeLocalUserSessions ( String  realmId,
boolean  offline 
)
inlineprivate
614  {
615  FuturesHelper futures = new FuturesHelper();
616 
617  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
618  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCache = CacheDecorators.localCache(cache);
619  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache = getClientSessionCache(offline);
620  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> localClientSessionCache = CacheDecorators.localCache(clientSessionCache);
621 
622  Cache<String, SessionEntityWrapper<UserSessionEntity>> localCacheStoreIgnore = CacheDecorators.skipCacheLoaders(localCache);
623 
624  final AtomicInteger userSessionsSize = new AtomicInteger();
625 
626  localCacheStoreIgnore
627  .entrySet()
628  .stream()
629  .filter(SessionPredicate.create(realmId))
630  .map(Mappers.userSessionEntity())
631  .forEach(new Consumer<UserSessionEntity>() {
632 
633  @Override
634  public void accept(UserSessionEntity userSessionEntity) {
635  userSessionsSize.incrementAndGet();
636 
637  // Remove session from remoteCache too. Use removeAsync for better perf
638  Future future = localCache.removeAsync(userSessionEntity.getId());
639  futures.addTask(future);
640  userSessionEntity.getAuthenticatedClientSessions().forEach((clientUUID, clientSessionId) -> {
641  Future f = localClientSessionCache.removeAsync(clientSessionId);
642  futures.addTask(f);
643  });
644  }
645 
646  });
647 
648 
649  futures.waitForAllToFinish();
650 
651  log.debugf("Removed %d sessions in realm %s. Offline: %b", (Object) userSessionsSize.get(), realmId, offline);
652  }
Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > getClientSessionCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:155
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
final Cache< UUID, SessionEntityWrapper< AuthenticatedClientSessionEntity > > clientSessionCache
Definition: InfinispanUserSessionProvider.java:91
static final Logger log
Definition: InfinispanUserSessionProvider.java:85

◆ removeOfflineUserSession()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeOfflineUserSession ( RealmModel  realm,
UserSessionModel  userSession 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

812  {
813  UserSessionEntity userSessionEntity = getUserSessionEntity(userSession, true);
814  if (userSessionEntity != null) {
815  removeUserSession(userSessionEntity, true);
816  }
817  }
void removeUserSession(RealmModel realm, UserSessionModel session)
Definition: InfinispanUserSessionProvider.java:438
UserSessionEntity getUserSessionEntity(String id, boolean offline)
Definition: InfinispanUserSessionProvider.java:238

◆ removeUserLoginFailure()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserLoginFailure ( RealmModel  realm,
String  userId 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

681  {
682  SessionUpdateTask<LoginFailureEntity> removeTask = Tasks.removeSync();
683  loginFailuresTx.addTask(new LoginFailureKey(realm.getId(), userId), removeTask);
684  }
final InfinispanChangelogBasedTransaction< LoginFailureKey, LoginFailureEntity > loginFailuresTx
Definition: InfinispanUserSessionProvider.java:99

◆ removeUserSession() [1/2]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserSession ( RealmModel  realm,
UserSessionModel  session 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

438  {
439  UserSessionEntity entity = getUserSessionEntity(session, false);
440  if (entity != null) {
441  removeUserSession(entity, false);
442  }
443  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
void removeUserSession(RealmModel realm, UserSessionModel session)
Definition: InfinispanUserSessionProvider.java:438
UserSessionEntity getUserSessionEntity(String id, boolean offline)
Definition: InfinispanUserSessionProvider.java:238

◆ removeUserSession() [2/2]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserSession ( UserSessionEntity  sessionEntity,
boolean  offline 
)
inlineprotected
757  {
758  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(offline);
759  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(offline);
760  sessionEntity.getAuthenticatedClientSessions().forEach((clientUUID, clientSessionId) -> clientSessionUpdateTx.addTask(clientSessionId, Tasks.removeSync()));
761  SessionUpdateTask<UserSessionEntity> removeTask = Tasks.removeSync();
762  userSessionUpdateTx.addTask(sessionEntity.getId(), removeTask);
763  }
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ removeUserSessions() [1/3]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserSessions ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.models.UserSessionProviderを実装しています。

446  {
447  removeUserSessions(realm, user, false);
448  }
void removeUserSessions(RealmModel realm, UserModel user)
Definition: InfinispanUserSessionProvider.java:446

◆ removeUserSessions() [2/3]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserSessions ( RealmModel  realm,
UserModel  user,
boolean  offline 
)
inlineprotected
450  {
451  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = getCache(offline);
452 
453  cache = CacheDecorators.skipCacheLoaders(cache);
454 
455  Iterator<UserSessionEntity> itr = cache.entrySet().stream().filter(UserSessionPredicate.create(realm.getId()).user(user.getId())).map(Mappers.userSessionEntity()).iterator();
456 
457  while (itr.hasNext()) {
458  UserSessionEntity userSessionEntity = itr.next();
459  removeUserSession(userSessionEntity, offline);
460  }
461  }
Cache< String, SessionEntityWrapper< UserSessionEntity > > getCache(boolean offline)
Definition: InfinispanUserSessionProvider.java:147
void removeUserSession(RealmModel realm, UserSessionModel session)
Definition: InfinispanUserSessionProvider.java:438

◆ removeUserSessions() [3/3]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.removeUserSessions ( RealmModel  realm)
inline

org.keycloak.models.UserSessionProviderを実装しています。

603  {
604  // Don't send message to all DCs, just to all cluster nodes in current DC. The remoteCache will notify client listeners for removed userSessions.
606  RemoveUserSessionsEvent.createEvent(RemoveUserSessionsEvent.class, InfinispanUserSessionProviderFactory.REMOVE_USER_SESSIONS_EVENT, session, realm.getId(), true),
607  ClusterProvider.DCNotify.LOCAL_DC_ONLY);
608  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
final SessionEventsSenderTransaction clusterEventsSenderTx
Definition: InfinispanUserSessionProvider.java:101
void addEvent(SessionClusterEvent event, ClusterProvider.DCNotify dcNotify)
Definition: SessionEventsSenderTransaction.java:42

◆ updateSessionEntity()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.updateSessionEntity ( UserSessionEntity  entity,
RealmModel  realm,
UserModel  user,
String  loginUsername,
String  ipAddress,
String  authMethod,
boolean  rememberMe,
String  brokerSessionId,
String  brokerUserId 
)
inlinepackage
209  {
210  entity.setRealmId(realm.getId());
211  entity.setUser(user.getId());
212  entity.setLoginUsername(loginUsername);
213  entity.setIpAddress(ipAddress);
214  entity.setAuthMethod(authMethod);
215  entity.setRememberMe(rememberMe);
216  entity.setBrokerSessionId(brokerSessionId);
217  entity.setBrokerUserId(brokerUserId);
218 
219  int currentTime = Time.currentTime();
220 
221  entity.setStarted(currentTime);
222  entity.setLastSessionRefresh(currentTime);
223 
224 
225  }

◆ wrap() [1/3]

UserSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.wrap ( RealmModel  realm,
UserSessionEntity  entity,
boolean  offline 
)
inlinepackage
769  {
770  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(offline);
771  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(offline);
772  return entity != null ? new UserSessionAdapter(session, this, userSessionUpdateTx, clientSessionUpdateTx, realm, entity, offline) : null;
773  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ wrap() [2/3]

AuthenticatedClientSessionAdapter org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.wrap ( UserSessionModel  userSession,
ClientModel  client,
AuthenticatedClientSessionEntity  entity,
boolean  offline 
)
inlinepackage
775  {
776  InfinispanChangelogBasedTransaction<String, UserSessionEntity> userSessionUpdateTx = getTransaction(offline);
777  InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> clientSessionUpdateTx = getClientSessionTransaction(offline);
778  return entity != null ? new AuthenticatedClientSessionAdapter(session,this, entity, client, userSession, userSessionUpdateTx, clientSessionUpdateTx, offline) : null;
779  }
final KeycloakSession session
Definition: InfinispanUserSessionProvider.java:87
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > getClientSessionTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:159
InfinispanChangelogBasedTransaction< String, UserSessionEntity > getTransaction(boolean offline)
Definition: InfinispanUserSessionProvider.java:151

◆ wrap() [3/3]

UserLoginFailureModel org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.wrap ( LoginFailureKey  key,
LoginFailureEntity  entity 
)
inlinepackage
781  {
782  return entity != null ? new UserLoginFailureAdapter(this, key, entity) : null;
783  }

メンバ詳解

◆ clientSessionCache

final Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.clientSessionCache
protected

◆ clientSessionTx

final InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.clientSessionTx
protected

◆ clusterEventsSenderTx

final SessionEventsSenderTransaction org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.clusterEventsSenderTx
protected

◆ keyGenerator

final InfinispanKeyGenerator org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.keyGenerator
protected

◆ lastSessionRefreshStore

final LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.lastSessionRefreshStore
protected

◆ log

final Logger org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.log = Logger.getLogger(InfinispanUserSessionProvider.class)
staticprivate

◆ loginFailureCache

final Cache<LoginFailureKey, SessionEntityWrapper<LoginFailureEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.loginFailureCache
protected

◆ loginFailuresTx

final InfinispanChangelogBasedTransaction<LoginFailureKey, LoginFailureEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.loginFailuresTx
protected

◆ offlineClientSessionCache

final Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.offlineClientSessionCache
protected

◆ offlineClientSessionTx

final InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.offlineClientSessionTx
protected

◆ offlineLastSessionRefreshStore

final LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.offlineLastSessionRefreshStore
protected

◆ offlineSessionCache

final Cache<String, SessionEntityWrapper<UserSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.offlineSessionCache
protected

◆ offlineSessionTx

final InfinispanChangelogBasedTransaction<String, UserSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.offlineSessionTx
protected

◆ session

final KeycloakSession org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.session
protected

◆ sessionCache

final Cache<String, SessionEntityWrapper<UserSessionEntity> > org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.sessionCache
protected

◆ sessionTx

final InfinispanChangelogBasedTransaction<String, UserSessionEntity> org.keycloak.models.sessions.infinispan.InfinispanUserSessionProvider.sessionTx
protected

このクラス詳解は次のファイルから抽出されました: