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

公開メンバ関数

InfinispanUserSessionProvider create (KeycloakSession session)
 
void init (Config.Scope config)
 
void postInit (final KeycloakSessionFactory factory)
 
void loadPersistentSessions (final KeycloakSessionFactory sessionFactory, final int maxErrors, final int sessionsPerSegment)
 
void close ()
 
String getId ()
 
void init (Config.Scope config)
 
default int order ()
 

静的公開変数類

static final String PROVIDER_ID = "infinispan"
 
static final String REALM_REMOVED_SESSION_EVENT = "REALM_REMOVED_EVENT_SESSIONS"
 
static final String CLIENT_REMOVED_SESSION_EVENT = "CLIENT_REMOVED_SESSION_SESSIONS"
 
static final String REMOVE_USER_SESSIONS_EVENT = "REMOVE_USER_SESSIONS_EVENT"
 
static final String REMOVE_ALL_LOGIN_FAILURES_EVENT = "REMOVE_ALL_LOGIN_FAILURES_EVENT"
 

限定公開メンバ関数

void registerClusterListeners (KeycloakSession session)
 
void checkRemoteCaches (KeycloakSession session)
 

関数

private< K, V extends SessionEntity > boolean checkRemoteCache (KeycloakSession session, Cache< K, SessionEntityWrapper< V >> ispnCache, RemoteCacheInvoker.MaxIdleTimeLoader maxIdleLoader)
 

非公開メンバ関数

int getMaxErrors ()
 
int getSessionsPerSegment ()
 
int getTimeoutForPreloadingSessionsSeconds ()
 
void loadSessionsFromRemoteCaches (KeycloakSession session)
 
void loadSessionsFromRemoteCache (final KeycloakSessionFactory sessionFactory, String cacheName, final int sessionsPerSegment, final int maxErrors)
 

非公開変数類

Config.Scope config
 
RemoteCacheInvoker remoteCacheInvoker
 
LastSessionRefreshStore lastSessionRefreshStore
 
LastSessionRefreshStore offlineLastSessionRefreshStore
 
InfinispanKeyGenerator keyGenerator
 

静的非公開変数類

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

詳解

関数詳解

◆ checkRemoteCache()

private<K, V extends SessionEntity> boolean org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.checkRemoteCache ( KeycloakSession  session,
Cache< K, SessionEntityWrapper< V >>  ispnCache,
RemoteCacheInvoker.MaxIdleTimeLoader  maxIdleLoader 
)
inlinepackage
265  {
266  Set<RemoteStore> remoteStores = InfinispanUtil.getRemoteStores(ispnCache);
267 
268  if (remoteStores.isEmpty()) {
269  log.debugf("No remote store configured for cache '%s'", ispnCache.getName());
270  return false;
271  } else {
272  log.infof("Remote store configured for cache '%s'", ispnCache.getName());
273 
274  RemoteCache<K, SessionEntityWrapper<V>> remoteCache = (RemoteCache) remoteStores.iterator().next().getRemoteCache();
275 
276  if (remoteCache == null) {
277  throw new IllegalStateException("No remote cache available for the infinispan cache: " + ispnCache.getName());
278  }
279 
280  remoteCacheInvoker.addRemoteCache(ispnCache.getName(), remoteCache, maxIdleLoader);
281 
282  RemoteCacheSessionListener hotrodListener = RemoteCacheSessionListener.createListener(session, ispnCache, remoteCache);
283  remoteCache.addClientListener(hotrodListener);
284  return true;
285  }
286  }
static final Logger log
Definition: InfinispanUserSessionProviderFactory.java:68
void addRemoteCache(String cacheName, RemoteCache remoteCache, MaxIdleTimeLoader maxIdleLoader)
Definition: RemoteCacheInvoker.java:50
RemoteCacheInvoker remoteCacheInvoker
Definition: InfinispanUserSessionProviderFactory.java:82

◆ checkRemoteCaches()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.checkRemoteCaches ( KeycloakSession  session)
inlineprotected
224  {
225  this.remoteCacheInvoker = new RemoteCacheInvoker();
226 
227  InfinispanConnectionProvider ispn = session.getProvider(InfinispanConnectionProvider.class);
228 
229  Cache<String, SessionEntityWrapper<UserSessionEntity>> sessionsCache = ispn.getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
230  boolean sessionsRemoteCache = checkRemoteCache(session, sessionsCache, (RealmModel realm) -> {
231  // We won't write to the remoteCache during token refresh, so the timeout needs to be longer.
232  return realm.getSsoSessionMaxLifespan() * 1000;
233  });
234 
235  if (sessionsRemoteCache) {
236  lastSessionRefreshStore = new LastSessionRefreshStoreFactory().createAndInit(session, sessionsCache, false);
237  }
238 
239  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionsCache = ispn.getCache(InfinispanConnectionProvider.CLIENT_SESSION_CACHE_NAME);
240  checkRemoteCache(session, clientSessionsCache, (RealmModel realm) -> {
241  // We won't write to the remoteCache during token refresh, so the timeout needs to be longer.
242  return realm.getSsoSessionMaxLifespan() * 1000;
243  });
244 
245  Cache<String, SessionEntityWrapper<UserSessionEntity>> offlineSessionsCache = ispn.getCache(InfinispanConnectionProvider.OFFLINE_USER_SESSION_CACHE_NAME);
246  boolean offlineSessionsRemoteCache = checkRemoteCache(session, offlineSessionsCache, (RealmModel realm) -> {
247  return realm.getOfflineSessionIdleTimeout() * 1000;
248  });
249 
250  if (offlineSessionsRemoteCache) {
251  offlineLastSessionRefreshStore = new LastSessionRefreshStoreFactory().createAndInit(session, offlineSessionsCache, true);
252  }
253 
254  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> offlineClientSessionsCache = ispn.getCache(InfinispanConnectionProvider.OFFLINE_CLIENT_SESSION_CACHE_NAME);
255  checkRemoteCache(session, offlineClientSessionsCache, (RealmModel realm) -> {
256  return realm.getOfflineSessionIdleTimeout() * 1000;
257  });
258 
259  Cache<LoginFailureKey, SessionEntityWrapper<LoginFailureEntity>> loginFailuresCache = ispn.getCache(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME);
260  checkRemoteCache(session, loginFailuresCache, (RealmModel realm) -> {
261  return realm.getMaxDeltaTimeSeconds() * 1000;
262  });
263  }
private< K, V extends SessionEntity > boolean checkRemoteCache(KeycloakSession session, Cache< K, SessionEntityWrapper< V >> ispnCache, RemoteCacheInvoker.MaxIdleTimeLoader maxIdleLoader)
Definition: InfinispanUserSessionProviderFactory.java:265
LastSessionRefreshStore offlineLastSessionRefreshStore
Definition: InfinispanUserSessionProviderFactory.java:84
RemoteCacheInvoker remoteCacheInvoker
Definition: InfinispanUserSessionProviderFactory.java:82
LastSessionRefreshStore lastSessionRefreshStore
Definition: InfinispanUserSessionProviderFactory.java:83

◆ close()

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

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

320  {
321  }

◆ create()

InfinispanUserSessionProvider org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.create ( KeycloakSession  session)
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

88  {
89  InfinispanConnectionProvider connections = session.getProvider(InfinispanConnectionProvider.class);
90  Cache<String, SessionEntityWrapper<UserSessionEntity>> cache = connections.getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
91  Cache<String, SessionEntityWrapper<UserSessionEntity>> offlineSessionsCache = connections.getCache(InfinispanConnectionProvider.OFFLINE_USER_SESSION_CACHE_NAME);
92  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> clientSessionCache = connections.getCache(InfinispanConnectionProvider.CLIENT_SESSION_CACHE_NAME);
93  Cache<UUID, SessionEntityWrapper<AuthenticatedClientSessionEntity>> offlineClientSessionsCache = connections.getCache(InfinispanConnectionProvider.OFFLINE_CLIENT_SESSION_CACHE_NAME);
94  Cache<LoginFailureKey, SessionEntityWrapper<LoginFailureEntity>> loginFailures = connections.getCache(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME);
95 
96  return new InfinispanUserSessionProvider(session, remoteCacheInvoker, lastSessionRefreshStore, offlineLastSessionRefreshStore, keyGenerator,
97  cache, offlineSessionsCache, clientSessionCache, offlineClientSessionsCache, loginFailures);
98  }
LastSessionRefreshStore offlineLastSessionRefreshStore
Definition: InfinispanUserSessionProviderFactory.java:84
RemoteCacheInvoker remoteCacheInvoker
Definition: InfinispanUserSessionProviderFactory.java:82
LastSessionRefreshStore lastSessionRefreshStore
Definition: InfinispanUserSessionProviderFactory.java:83
InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProviderFactory.java:85

◆ getId()

String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.getId ( )
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

324  {
325  return PROVIDER_ID;
326  }
static final String PROVIDER_ID
Definition: InfinispanUserSessionProviderFactory.java:70

◆ getMaxErrors()

int org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.getMaxErrors ( )
inlineprivate
138  {
139  return config.getInt("maxErrors", 20);
140  }
Config.Scope config
Definition: InfinispanUserSessionProviderFactory.java:80

◆ getSessionsPerSegment()

int org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.getSessionsPerSegment ( )
inlineprivate
143  {
144  return config.getInt("sessionsPerSegment", 64);
145  }
Config.Scope config
Definition: InfinispanUserSessionProviderFactory.java:80

◆ getTimeoutForPreloadingSessionsSeconds()

int org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.getTimeoutForPreloadingSessionsSeconds ( )
inlineprivate
147  {
148  Integer timeout = config.getInt("sessionsPreloadTimeoutInSeconds", null);
149  return timeout != null ? timeout : Environment.getServerStartupTimeout();
150  }
Config.Scope config
Definition: InfinispanUserSessionProviderFactory.java:80

◆ init() [1/2]

void org.keycloak.provider.ProviderFactory< T extends Provider >.init ( Config.Scope  config)
inherited

Only called once when the factory is first created. This config is pulled from keycloak_server.json

引数
config

org.keycloak.storage.ldap.LDAPStorageProviderFactory, org.keycloak.protocol.saml.EntityDescriptorDescriptionConverter, org.keycloak.authentication.authenticators.x509.AbstractX509ClientCertificateAuthenticatorFactory, org.keycloak.authentication.forms.RegistrationUserCreation, org.keycloak.authentication.authenticators.resetcred.ResetCredentialEmail, org.keycloak.authentication.forms.RegistrationRecaptcha, org.keycloak.authentication.authenticators.resetcred.ResetCredentialChooseUser, org.keycloak.authentication.forms.RegistrationProfile, org.keycloak.authentication.forms.RegistrationPassword, org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory, org.keycloak.protocol.saml.installation.KeycloakSamlClientInstallation, org.keycloak.protocol.saml.installation.SamlIDPDescriptorClientInstallation, org.keycloak.authentication.requiredactions.UpdateProfile, org.keycloak.authentication.requiredactions.UpdatePassword, org.keycloak.protocol.oidc.installation.KeycloakOIDCClientInstallation, org.keycloak.protocol.saml.mappers.RoleNameMapper, org.keycloak.connections.httpclient.DefaultHttpClientFactory, org.keycloak.protocol.saml.installation.ModAuthMellonClientInstallation, org.keycloak.federation.kerberos.KerberosFederationProviderFactory, org.keycloak.authentication.requiredactions.VerifyEmail, org.keycloak.authentication.requiredactions.UpdateTotp, org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider, org.keycloak.protocol.oidc.installation.KeycloakOIDCJbossSubsystemClientInstallation, org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory, org.keycloak.protocol.saml.installation.SamlSPDescriptorClientInstallation, org.keycloak.policy.BlacklistPasswordPolicyProviderFactory, org.keycloak.authentication.forms.RegistrationPage, org.keycloak.protocol.saml.profile.ecp.authenticator.HttpBasicAuthenticatorFactory, org.keycloak.authentication.authenticators.browser.IdentityProviderAuthenticatorFactory, org.keycloak.authentication.authenticators.resetcred.AbstractSetRequiredActionAuthenticator, org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory, org.keycloak.protocol.saml.installation.KeycloakSamlSubsystemInstallation, org.keycloak.keys.infinispan.InfinispanPublicKeyStorageProviderFactory, org.keycloak.theme.ClasspathThemeProviderFactory, org.keycloak.models.cache.infinispan.InfinispanUserCacheProviderFactory, org.keycloak.models.cache.infinispan.InfinispanCacheRealmProviderFactory, org.keycloak.executors.DefaultExecutorsProviderFactory, org.keycloak.authentication.authenticators.browser.ScriptBasedAuthenticatorFactory, org.keycloak.protocol.saml.SamlProtocolFactory, org.keycloak.authentication.authenticators.browser.ConditionalOtpFormAuthenticatorFactory, org.keycloak.protocol.docker.DockerAuthenticatorFactory, org.keycloak.storage.UserStorageProviderFactory< T extends UserStorageProvider >, org.keycloak.storage.client.ClientStorageProviderFactory< T extends ClientStorageProvider >, org.keycloak.authentication.authenticators.directgrant.AbstractDirectGrantAuthenticator, org.keycloak.authentication.authenticators.browser.OTPFormAuthenticatorFactory, org.keycloak.authentication.authenticators.browser.UsernamePasswordFormFactory, org.keycloak.exportimport.KeycloakClientDescriptionConverter, org.keycloak.authentication.authenticators.browser.SpnegoAuthenticatorFactory, org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper, org.keycloak.authentication.authenticators.browser.CookieAuthenticatorFactory, org.keycloak.authentication.requiredactions.TermsAndConditions, org.keycloak.events.email.EmailEventListenerProviderFactory, org.keycloak.authentication.authenticators.broker.IdpReviewProfileAuthenticatorFactory, org.keycloak.protocol.saml.mappers.AbstractSAMLProtocolMapper, org.keycloak.models.session.DisabledUserSessionPersisterProvider, org.keycloak.services.x509.DefaultClientCertificateLookupFactory, org.keycloak.authentication.authenticators.broker.IdpCreateUserIfUniqueAuthenticatorFactory, org.keycloak.authentication.authenticators.cli.CliUsernamePasswordAuthenticatorFactory, org.keycloak.authentication.authenticators.client.AbstractClientAuthenticator, org.keycloak.theme.JarThemeProviderFactory, org.keycloak.authentication.authenticators.challenge.BasicAuthAuthenticatorFactory, org.keycloak.authentication.authenticators.challenge.BasicAuthOTPAuthenticatorFactory, org.keycloak.authentication.authenticators.challenge.NoCookieFlowRedirectAuthenticatorFactory, org.keycloak.connections.jpa.updater.liquibase.lock.LiquibaseDBLockProviderFactory, org.keycloak.models.sessions.infinispan.InfinispanActionTokenStoreProviderFactory, org.keycloak.timer.basic.BasicTimerProviderFactory, org.keycloak.truststore.FileTruststoreProviderFactory, org.keycloak.authentication.authenticators.console.ConsoleUsernamePasswordAuthenticatorFactory, org.keycloak.events.log.JBossLoggingEventListenerProviderFactory, org.keycloak.protocol.oidc.OIDCClientDescriptionConverterFactory, org.keycloak.authentication.authenticators.broker.IdpConfirmLinkAuthenticatorFactory, org.keycloak.authentication.authenticators.broker.IdpEmailVerificationAuthenticatorFactory, org.keycloak.exportimport.singlefile.SingleFileImportProviderFactory, org.keycloak.services.x509.AbstractClientCertificateFromHttpHeadersLookupFactory, org.keycloak.theme.ClasspathThemeResourceProviderFactory, org.keycloak.exportimport.dir.DirExportProviderFactory, org.keycloak.exportimport.singlefile.SingleFileExportProviderFactory, org.keycloak.policy.HashAlgorithmPasswordPolicyProviderFactory, org.keycloak.policy.HistoryPasswordPolicyProviderFactory, org.keycloak.protocol.docker.mapper.DockerAuthV2ProtocolMapper, org.keycloak.authentication.authenticators.broker.IdpAutoLinkAuthenticatorFactory, org.keycloak.models.jpa.session.JpaUserSessionPersisterProviderFactory, org.keycloak.policy.DigitsPasswordPolicyProviderFactory, org.keycloak.policy.LengthPasswordPolicyProviderFactory, org.keycloak.policy.NotUsernamePasswordPolicyProviderFactory, org.keycloak.policy.RegexPatternsPasswordPolicyProviderFactory, org.keycloak.scripting.DefaultScriptingProviderFactory, org.keycloak.credential.hash.Pbkdf2PasswordHashProviderFactory, org.keycloak.events.jpa.JpaEventStoreProviderFactory, org.keycloak.exportimport.dir.DirImportProviderFactory, org.keycloak.transaction.JBossJtaTransactionManagerLookup, org.keycloak.email.freemarker.FreeMarkerEmailTemplateProviderFactory, org.keycloak.forms.account.freemarker.FreeMarkerAccountProviderFactory, org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProviderFactory, org.keycloak.policy.ForceExpiredPasswordPolicyProviderFactory, org.keycloak.storage.jpa.JpaUserFederatedStorageProviderFactory, org.keycloak.keys.KeyProviderFactory< T extends KeyProvider >, org.keycloak.policy.HashIterationsPasswordPolicyProviderFactory, org.keycloak.protocol.oidc.OIDCWellKnownProviderFactory, org.keycloak.protocol.saml.clientregistration.EntityDescriptorClientRegistrationProviderFactory, org.keycloak.services.clientregistration.oidc.OIDCClientRegistrationProviderFactory, org.keycloak.theme.ExtendingThemeManagerFactory, org.keycloak.theme.FolderThemeProviderFactory, org.keycloak.credential.CredentialProviderFactory< T extends CredentialProvider >, org.keycloak.services.clientregistration.policy.AbstractClientRegistrationPolicyFactory, org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProviderFactory, org.keycloak.policy.LowerCasePasswordPolicyProviderFactory, org.keycloak.policy.SpecialCharsPasswordPolicyProviderFactory, org.keycloak.policy.UpperCasePasswordPolicyProviderFactory, org.keycloak.protocol.oidc.AccessTokenIntrospectionProviderFactory, org.keycloak.provider.wildfly.ModuleThemeProviderFactory, org.keycloak.services.managers.DefaultBruteForceProtectorFactory, org.keycloak.services.migration.DefaultMigrationProviderFactory, org.keycloak.models.jpa.JpaRealmProviderFactory, org.keycloak.models.jpa.JpaUserCredentialStoreFactory, org.keycloak.models.jpa.JpaUserProviderFactory, org.keycloak.protocol.docker.installation.DockerComposeYamlInstallationProvider, org.keycloak.email.DefaultEmailSenderProviderFactory, org.keycloak.policy.DefaultPasswordPolicyManagerProviderFactory, org.keycloak.protocol.AbstractLoginProtocolFactory, org.keycloak.services.clientregistration.AdapterInstallationClientRegistrationProviderFactory, org.keycloak.services.clientregistration.DefaultClientRegistrationProviderFactory, org.keycloak.locale.DefaultLocaleSelectorProviderFactory, org.keycloak.urls.HostnameProviderFactory, org.keycloak.credential.hash.Pbkdf2Sha256PasswordHashProviderFactory, org.keycloak.credential.hash.Pbkdf2Sha512PasswordHashProviderFactory, org.keycloak.crypto.SignatureProviderFactory, org.keycloak.protocol.docker.installation.DockerRegistryConfigFileInstallationProvider, org.keycloak.protocol.docker.installation.DockerVariableOverrideInstallationProvider, org.keycloak.url.FixedHostnameProviderFactory, org.keycloak.theme.DefaultThemeSelectorProviderFactory, org.keycloak.protocol.oidc.ext.OIDCExtProviderFactory (計132項目)で実装されています。

◆ init() [2/2]

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.init ( Config.Scope  config)
inline
101  {
102  this.config = config;
103  }
Config.Scope config
Definition: InfinispanUserSessionProviderFactory.java:80

◆ loadPersistentSessions()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.loadPersistentSessions ( final KeycloakSessionFactory  sessionFactory,
final int  maxErrors,
final int  sessionsPerSegment 
)
inline

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

154  {
155  log.debug("Start pre-loading userSessions from persistent storage");
156 
157  KeycloakModelUtils.runJobInTransaction(sessionFactory, new KeycloakSessionTask() {
158 
159  @Override
160  public void run(KeycloakSession session) {
161  InfinispanConnectionProvider connections = session.getProvider(InfinispanConnectionProvider.class);
162  Cache<String, Serializable> workCache = connections.getCache(InfinispanConnectionProvider.WORK_CACHE_NAME);
163 
164  InfinispanCacheInitializer ispnInitializer = new InfinispanCacheInitializer(sessionFactory, workCache,
165  new OfflinePersistentUserSessionLoader(sessionsPerSegment), "offlineUserSessions", sessionsPerSegment, maxErrors);
166 
167  // DB-lock to ensure that persistent sessions are loaded from DB just on one DC. The other DCs will load them from remote cache.
168  CacheInitializer initializer = new DBLockBasedCacheInitializer(session, ispnInitializer);
169 
170  initializer.initCache();
171  initializer.loadSessions();
172  }
173 
174  });
175 
176  log.debug("Pre-loading userSessions from persistent storage finished");
177  }
static final Logger log
Definition: InfinispanUserSessionProviderFactory.java:68

◆ loadSessionsFromRemoteCache()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.loadSessionsFromRemoteCache ( final KeycloakSessionFactory  sessionFactory,
String  cacheName,
final int  sessionsPerSegment,
final int  maxErrors 
)
inlineprivate
296  {
297  log.debugf("Check pre-loading sessions from remote cache '%s'", cacheName);
298 
299  KeycloakModelUtils.runJobInTransaction(sessionFactory, new KeycloakSessionTask() {
300 
301  @Override
302  public void run(KeycloakSession session) {
303  InfinispanConnectionProvider connections = session.getProvider(InfinispanConnectionProvider.class);
304  Cache<String, Serializable> workCache = connections.getCache(InfinispanConnectionProvider.WORK_CACHE_NAME);
305 
306  InfinispanCacheInitializer initializer = new InfinispanCacheInitializer(sessionFactory, workCache,
307  new RemoteCacheSessionsLoader(cacheName, sessionsPerSegment), "remoteCacheLoad::" + cacheName, sessionsPerSegment, maxErrors);
308 
309  initializer.initCache();
310  initializer.loadSessions();
311  }
312 
313  });
314 
315  log.debugf("Pre-loading sessions from remote cache '%s' finished", cacheName);
316  }
static final Logger log
Definition: InfinispanUserSessionProviderFactory.java:68

◆ loadSessionsFromRemoteCaches()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.loadSessionsFromRemoteCaches ( KeycloakSession  session)
inlineprivate
289  {
290  for (String cacheName : remoteCacheInvoker.getRemoteCacheNames()) {
291  loadSessionsFromRemoteCache(session.getKeycloakSessionFactory(), cacheName, getSessionsPerSegment(), getMaxErrors());
292  }
293  }
int getSessionsPerSegment()
Definition: InfinispanUserSessionProviderFactory.java:143
int getMaxErrors()
Definition: InfinispanUserSessionProviderFactory.java:138
void loadSessionsFromRemoteCache(final KeycloakSessionFactory sessionFactory, String cacheName, final int sessionsPerSegment, final int maxErrors)
Definition: InfinispanUserSessionProviderFactory.java:296
Set< String > getRemoteCacheNames()
Definition: RemoteCacheInvoker.java:55
RemoteCacheInvoker remoteCacheInvoker
Definition: InfinispanUserSessionProviderFactory.java:82

◆ order()

default int org.keycloak.provider.ProviderFactory< T extends Provider >.order ( )
inlineinherited

◆ postInit()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.postInit ( final KeycloakSessionFactory  factory)
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

106  {
107 
108  factory.register(new ProviderEventListener() {
109 
110  @Override
111  public void onEvent(ProviderEvent event) {
112  if (event instanceof PostMigrationEvent) {
113 
114  int preloadTransactionTimeout = getTimeoutForPreloadingSessionsSeconds();
115  log.debugf("Will preload sessions with transaction timeout %d seconds", preloadTransactionTimeout);
116 
117  KeycloakModelUtils.runJobInTransactionWithTimeout(factory, (KeycloakSession session) -> {
118 
119  keyGenerator = new InfinispanKeyGenerator();
120  checkRemoteCaches(session);
122  registerClusterListeners(session);
124 
125  }, preloadTransactionTimeout);
126 
127  } else if (event instanceof UserModel.UserRemovedEvent) {
128  UserModel.UserRemovedEvent userRemovedEvent = (UserModel.UserRemovedEvent) event;
129 
130  InfinispanUserSessionProvider provider = (InfinispanUserSessionProvider) userRemovedEvent.getKeycloakSession().getProvider(UserSessionProvider.class, getId());
131  provider.onUserRemoved(userRemovedEvent.getRealm(), userRemovedEvent.getUser());
132  }
133  }
134  });
135  }
void loadSessionsFromRemoteCaches(KeycloakSession session)
Definition: InfinispanUserSessionProviderFactory.java:289
int getSessionsPerSegment()
Definition: InfinispanUserSessionProviderFactory.java:143
int getMaxErrors()
Definition: InfinispanUserSessionProviderFactory.java:138
static final Logger log
Definition: InfinispanUserSessionProviderFactory.java:68
void checkRemoteCaches(KeycloakSession session)
Definition: InfinispanUserSessionProviderFactory.java:224
String getId()
Definition: InfinispanUserSessionProviderFactory.java:324
void loadPersistentSessions(final KeycloakSessionFactory sessionFactory, final int maxErrors, final int sessionsPerSegment)
Definition: InfinispanUserSessionProviderFactory.java:154
void registerClusterListeners(KeycloakSession session)
Definition: InfinispanUserSessionProviderFactory.java:180
InfinispanKeyGenerator keyGenerator
Definition: InfinispanUserSessionProviderFactory.java:85
int getTimeoutForPreloadingSessionsSeconds()
Definition: InfinispanUserSessionProviderFactory.java:147

◆ registerClusterListeners()

void org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.registerClusterListeners ( KeycloakSession  session)
inlineprotected
180  {
181  KeycloakSessionFactory sessionFactory = session.getKeycloakSessionFactory();
182  ClusterProvider cluster = session.getProvider(ClusterProvider.class);
183 
184  cluster.registerListener(REALM_REMOVED_SESSION_EVENT, new AbstractUserSessionClusterListener<RealmRemovedSessionEvent>(sessionFactory) {
185 
186  @Override
187  protected void eventReceived(KeycloakSession session, InfinispanUserSessionProvider provider, RealmRemovedSessionEvent sessionEvent) {
188  provider.onRealmRemovedEvent(sessionEvent.getRealmId());
189  }
190 
191  });
192 
193  cluster.registerListener(CLIENT_REMOVED_SESSION_EVENT, new AbstractUserSessionClusterListener<ClientRemovedSessionEvent>(sessionFactory) {
194 
195  @Override
196  protected void eventReceived(KeycloakSession session, InfinispanUserSessionProvider provider, ClientRemovedSessionEvent sessionEvent) {
197  provider.onClientRemovedEvent(sessionEvent.getRealmId(), sessionEvent.getClientUuid());
198  }
199 
200  });
201 
202  cluster.registerListener(REMOVE_USER_SESSIONS_EVENT, new AbstractUserSessionClusterListener<RemoveUserSessionsEvent>(sessionFactory) {
203 
204  @Override
205  protected void eventReceived(KeycloakSession session, InfinispanUserSessionProvider provider, RemoveUserSessionsEvent sessionEvent) {
206  provider.onRemoveUserSessionsEvent(sessionEvent.getRealmId());
207  }
208 
209  });
210 
211  cluster.registerListener(REMOVE_ALL_LOGIN_FAILURES_EVENT, new AbstractUserSessionClusterListener<RemoveAllUserLoginFailuresEvent>(sessionFactory) {
212 
213  @Override
214  protected void eventReceived(KeycloakSession session, InfinispanUserSessionProvider provider, RemoveAllUserLoginFailuresEvent sessionEvent) {
215  provider.onRemoveAllUserLoginFailuresEvent(sessionEvent.getRealmId());
216  }
217 
218  });
219 
220  log.debug("Registered cluster listeners");
221  }
static final String CLIENT_REMOVED_SESSION_EVENT
Definition: InfinispanUserSessionProviderFactory.java:74
static final Logger log
Definition: InfinispanUserSessionProviderFactory.java:68
static final String REALM_REMOVED_SESSION_EVENT
Definition: InfinispanUserSessionProviderFactory.java:72
static final String REMOVE_ALL_LOGIN_FAILURES_EVENT
Definition: InfinispanUserSessionProviderFactory.java:78
static final String REMOVE_USER_SESSIONS_EVENT
Definition: InfinispanUserSessionProviderFactory.java:76

メンバ詳解

◆ CLIENT_REMOVED_SESSION_EVENT

final String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.CLIENT_REMOVED_SESSION_EVENT = "CLIENT_REMOVED_SESSION_SESSIONS"
static

◆ config

Config.Scope org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.config
private

◆ keyGenerator

InfinispanKeyGenerator org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.keyGenerator
private

◆ lastSessionRefreshStore

LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.lastSessionRefreshStore
private

◆ log

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

◆ offlineLastSessionRefreshStore

LastSessionRefreshStore org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.offlineLastSessionRefreshStore
private

◆ PROVIDER_ID

final String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.PROVIDER_ID = "infinispan"
static

◆ REALM_REMOVED_SESSION_EVENT

final String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.REALM_REMOVED_SESSION_EVENT = "REALM_REMOVED_EVENT_SESSIONS"
static

◆ remoteCacheInvoker

RemoteCacheInvoker org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.remoteCacheInvoker
private

◆ REMOVE_ALL_LOGIN_FAILURES_EVENT

final String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.REMOVE_ALL_LOGIN_FAILURES_EVENT = "REMOVE_ALL_LOGIN_FAILURES_EVENT"
static

◆ REMOVE_USER_SESSIONS_EVENT

final String org.keycloak.models.sessions.infinispan.InfinispanUserSessionProviderFactory.REMOVE_USER_SESSIONS_EVENT = "REMOVE_USER_SESSIONS_EVENT"
static

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