keycloak
公開メンバ関数 | 静的公開変数類 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker クラス
org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker 連携図
Collaboration graph

公開メンバ関数

 LastSessionRefreshChecker (LastSessionRefreshStore store, LastSessionRefreshStore offlineStore)
 
SessionUpdateTask.CrossDCMessageStatus shouldSaveUserSessionToRemoteCache (KeycloakSession kcSession, RealmModel realm, SessionEntityWrapper< UserSessionEntity > sessionWrapper, boolean offline, int newLastSessionRefresh)
 
SessionUpdateTask.CrossDCMessageStatus shouldSaveClientSessionToRemoteCache (KeycloakSession kcSession, RealmModel realm, SessionEntityWrapper< AuthenticatedClientSessionEntity > sessionWrapper, UserSessionModel userSession, boolean offline, int newTimestamp)
 

静的公開変数類

static final Logger logger = Logger.getLogger(LastSessionRefreshChecker.class)
 

非公開メンバ関数

SessionUpdateTask.CrossDCMessageStatus baseChecks (KeycloakSession kcSession, RealmModel realm, boolean offline)
 

非公開変数類

final LastSessionRefreshStore store
 
final LastSessionRefreshStore offlineStore
 

詳解

著者
Marek Posolda

構築子と解体子

◆ LastSessionRefreshChecker()

org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.LastSessionRefreshChecker ( LastSessionRefreshStore  store,
LastSessionRefreshStore  offlineStore 
)
inline
43  {
44  this.store = store;
46  }
final LastSessionRefreshStore offlineStore
Definition: LastSessionRefreshChecker.java:40
final LastSessionRefreshStore store
Definition: LastSessionRefreshChecker.java:39

関数詳解

◆ baseChecks()

SessionUpdateTask.CrossDCMessageStatus org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.baseChecks ( KeycloakSession  kcSession,
RealmModel  realm,
boolean  offline 
)
inlineprivate
114  {
115  // revokeRefreshToken always writes everything to remoteCache immediately
116  if (realm.isRevokeRefreshToken()) {
117  return SessionUpdateTask.CrossDCMessageStatus.SYNC;
118  }
119 
120  // We're likely not in cross-dc environment. Doesn't matter what we return
121  LastSessionRefreshStore storeToUse = offline ? offlineStore : store;
122  if (storeToUse == null) {
123  return SessionUpdateTask.CrossDCMessageStatus.SYNC;
124  }
125 
126  // Received the message from the other DC that we should update the lastSessionRefresh in local cluster
127  Boolean ignoreRemoteCacheUpdate = (Boolean) kcSession.getAttribute(LastSessionRefreshListener.IGNORE_REMOTE_CACHE_UPDATE);
128  if (ignoreRemoteCacheUpdate != null && ignoreRemoteCacheUpdate) {
129  return SessionUpdateTask.CrossDCMessageStatus.NOT_NEEDED;
130  }
131 
132  return null;
133  }
final LastSessionRefreshStore offlineStore
Definition: LastSessionRefreshChecker.java:40
final LastSessionRefreshStore store
Definition: LastSessionRefreshChecker.java:39

◆ shouldSaveClientSessionToRemoteCache()

SessionUpdateTask.CrossDCMessageStatus org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.shouldSaveClientSessionToRemoteCache ( KeycloakSession  kcSession,
RealmModel  realm,
SessionEntityWrapper< AuthenticatedClientSessionEntity sessionWrapper,
UserSessionModel  userSession,
boolean  offline,
int  newTimestamp 
)
inline
84  {
85 
86  SessionUpdateTask.CrossDCMessageStatus baseChecks = baseChecks(kcSession, realm ,offline);
87  if (baseChecks != null) {
88  return baseChecks;
89  }
90 
91  UUID clientSessionId = sessionWrapper.getEntity().getId();
92 
93  if (offline) {
94  Integer lsrr = sessionWrapper.getLocalMetadataNoteInt(AuthenticatedClientSessionEntity.LAST_TIMESTAMP_REMOTE);
95  if (lsrr == null) {
96  lsrr = userSession.getStarted();
97  }
98 
99  if (lsrr + (realm.getOfflineSessionIdleTimeout() / 2) <= newTimestamp) {
100  logger.debugf("We are going to write remotely for clientSession %s. Remote timestamp: %d, New timestamp: %d",
101  clientSessionId, lsrr, newTimestamp);
102  return SessionUpdateTask.CrossDCMessageStatus.SYNC;
103  }
104  }
105 
106  if (logger.isDebugEnabled()) {
107  logger.debugf("Skip writing timestamp to the remoteCache. ClientSession %s timestamp %d", clientSessionId, newTimestamp);
108  }
109 
110  return SessionUpdateTask.CrossDCMessageStatus.NOT_NEEDED;
111  }
static final Logger logger
Definition: LastSessionRefreshChecker.java:37
SessionUpdateTask.CrossDCMessageStatus baseChecks(KeycloakSession kcSession, RealmModel realm, boolean offline)
Definition: LastSessionRefreshChecker.java:114

◆ shouldSaveUserSessionToRemoteCache()

SessionUpdateTask.CrossDCMessageStatus org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.shouldSaveUserSessionToRemoteCache ( KeycloakSession  kcSession,
RealmModel  realm,
SessionEntityWrapper< UserSessionEntity sessionWrapper,
boolean  offline,
int  newLastSessionRefresh 
)
inline
50  {
51 
52  SessionUpdateTask.CrossDCMessageStatus baseChecks = baseChecks(kcSession, realm ,offline);
53  if (baseChecks != null) {
54  return baseChecks;
55  }
56 
57  String userSessionId = sessionWrapper.getEntity().getId();
58 
59  if (offline) {
60  Integer lsrr = sessionWrapper.getLocalMetadataNoteInt(UserSessionEntity.LAST_SESSION_REFRESH_REMOTE);
61  if (lsrr == null) {
62  lsrr = sessionWrapper.getEntity().getStarted();
63  }
64 
65  if (lsrr + (realm.getOfflineSessionIdleTimeout() / 2) <= newLastSessionRefresh) {
66  logger.debugf("We are going to write remotely userSession %s. Remote last session refresh: %d, New last session refresh: %d",
67  userSessionId, lsrr, newLastSessionRefresh);
68  return SessionUpdateTask.CrossDCMessageStatus.SYNC;
69  }
70  }
71 
72  if (logger.isDebugEnabled()) {
73  logger.debugf("Skip writing last session refresh to the remoteCache. Session %s newLastSessionRefresh %d", userSessionId, newLastSessionRefresh);
74  }
75 
76  LastSessionRefreshStore storeToUse = offline ? offlineStore : store;
77  storeToUse.putLastSessionRefresh(kcSession, userSessionId, realm.getId(), newLastSessionRefresh);
78 
79  return SessionUpdateTask.CrossDCMessageStatus.NOT_NEEDED;
80  }
void putLastSessionRefresh(KeycloakSession kcSession, String sessionId, String realmId, int lastSessionRefresh)
Definition: LastSessionRefreshStore.java:54
final LastSessionRefreshStore offlineStore
Definition: LastSessionRefreshChecker.java:40
final LastSessionRefreshStore store
Definition: LastSessionRefreshChecker.java:39
static final Logger logger
Definition: LastSessionRefreshChecker.java:37
SessionUpdateTask.CrossDCMessageStatus baseChecks(KeycloakSession kcSession, RealmModel realm, boolean offline)
Definition: LastSessionRefreshChecker.java:114

メンバ詳解

◆ logger

final Logger org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.logger = Logger.getLogger(LastSessionRefreshChecker.class)
static

◆ offlineStore

final LastSessionRefreshStore org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.offlineStore
private

◆ store

final LastSessionRefreshStore org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshChecker.store
private

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