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

公開メンバ関数

 LastSessionRefreshListener (KeycloakSession session, Cache< String, SessionEntityWrapper< UserSessionEntity >> cache, boolean offline)
 
void eventReceived (ClusterEvent event)
 

静的公開変数類

static final Logger logger = Logger.getLogger(LastSessionRefreshListener.class)
 
static final String IGNORE_REMOTE_CACHE_UPDATE = "IGNORE_REMOTE_CACHE_UPDATE"
 

限定公開メンバ関数

boolean shouldUpdateLocalCache (String key)
 

非公開変数類

final boolean offline
 
final KeycloakSessionFactory sessionFactory
 
final Cache< String, SessionEntityWrapper< UserSessionEntity > > cache
 
final TopologyInfo topologyInfo
 

詳解

著者
Marek Posolda

構築子と解体子

◆ LastSessionRefreshListener()

org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.LastSessionRefreshListener ( KeycloakSession  session,
Cache< String, SessionEntityWrapper< UserSessionEntity >>  cache,
boolean  offline 
)
inline
51  {
52  this.sessionFactory = session.getKeycloakSessionFactory();
53  this.cache = cache;
54  this.offline = offline;
55 
56  this.topologyInfo = InfinispanUtil.getTopologyInfo(session);
57  }
final boolean offline
Definition: LastSessionRefreshListener.java:45
final KeycloakSessionFactory sessionFactory
Definition: LastSessionRefreshListener.java:47
final Cache< String, SessionEntityWrapper< UserSessionEntity > > cache
Definition: LastSessionRefreshListener.java:48
final TopologyInfo topologyInfo
Definition: LastSessionRefreshListener.java:49

関数詳解

◆ eventReceived()

void org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.eventReceived ( ClusterEvent  event)
inline

org.keycloak.cluster.ClusterListenerを実装しています。

60  {
61  Map<String, SessionData> lastSessionRefreshes = ((LastSessionRefreshEvent) event).getLastSessionRefreshes();
62 
63  if (logger.isDebugEnabled()) {
64  logger.debugf("Received refreshes. Offline %b, refreshes: %s", offline, lastSessionRefreshes);
65  }
66 
67  lastSessionRefreshes.entrySet().stream().forEach((entry) -> {
68  String sessionId = entry.getKey();
69  String realmId = entry.getValue().getRealmId();
70  int lastSessionRefresh = entry.getValue().getLastSessionRefresh();
71 
72  // All nodes will receive the message. So ensure that each node updates just lastSessionRefreshes owned by him.
73  if (shouldUpdateLocalCache(sessionId)) {
74  KeycloakModelUtils.runJobInTransaction(sessionFactory, (kcSession) -> {
75 
76  RealmModel realm = kcSession.realms().getRealm(realmId);
77  UserSessionModel userSession = offline ? kcSession.sessions().getOfflineUserSession(realm, sessionId) : kcSession.sessions().getUserSession(realm, sessionId);
78  if (userSession == null) {
79  logger.debugf("User session '%s' not available on node '%s' offline '%b'", sessionId, topologyInfo.getMyNodeName(), offline);
80  } else {
81  // Update just if lastSessionRefresh from event is bigger than ours
82  if (lastSessionRefresh > userSession.getLastSessionRefresh()) {
83 
84  // Ensure that remoteCache won't be updated due to this
85  kcSession.setAttribute(IGNORE_REMOTE_CACHE_UPDATE, true);
86 
87  userSession.setLastSessionRefresh(lastSessionRefresh);
88  }
89  }
90  });
91  }
92 
93  });
94  }
final boolean offline
Definition: LastSessionRefreshListener.java:45
final KeycloakSessionFactory sessionFactory
Definition: LastSessionRefreshListener.java:47
boolean shouldUpdateLocalCache(String key)
Definition: LastSessionRefreshListener.java:98
static final String IGNORE_REMOTE_CACHE_UPDATE
Definition: LastSessionRefreshListener.java:43
static final Logger logger
Definition: LastSessionRefreshListener.java:41
String getMyNodeName()
Definition: TopologyInfo.java:113
final TopologyInfo topologyInfo
Definition: LastSessionRefreshListener.java:49

◆ shouldUpdateLocalCache()

boolean org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.shouldUpdateLocalCache ( String  key)
inlineprotected
98  {
99  return topologyInfo.amIOwner(cache, key);
100  }
boolean amIOwner(Cache cache, Object key)
Definition: TopologyInfo.java:131
final Cache< String, SessionEntityWrapper< UserSessionEntity > > cache
Definition: LastSessionRefreshListener.java:48
final TopologyInfo topologyInfo
Definition: LastSessionRefreshListener.java:49

メンバ詳解

◆ cache

final Cache<String, SessionEntityWrapper<UserSessionEntity> > org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.cache
private

◆ IGNORE_REMOTE_CACHE_UPDATE

final String org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.IGNORE_REMOTE_CACHE_UPDATE = "IGNORE_REMOTE_CACHE_UPDATE"
static

◆ logger

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

◆ offline

final boolean org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.offline
private

◆ sessionFactory

final KeycloakSessionFactory org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.sessionFactory
private

◆ topologyInfo

final TopologyInfo org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshListener.topologyInfo
private

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