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

公開メンバ関数

 UserSessionAdapter (KeycloakSession session, InfinispanUserSessionProvider provider, InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx, InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx, RealmModel realm, UserSessionEntity entity, boolean offline)
 
Map< String, AuthenticatedClientSessionModelgetAuthenticatedClientSessions ()
 
AuthenticatedClientSessionModel getAuthenticatedClientSessionByClient (String clientUUID)
 
void removeAuthenticatedClientSessions (Collection< String > removedClientUUIDS)
 
String getId ()
 
RealmModel getRealm ()
 
String getBrokerSessionId ()
 
String getBrokerUserId ()
 
UserModel getUser ()
 
String getLoginUsername ()
 
String getIpAddress ()
 
String getAuthMethod ()
 
boolean isRememberMe ()
 
int getStarted ()
 
int getLastSessionRefresh ()
 
void setLastSessionRefresh (int lastSessionRefresh)
 
boolean isOffline ()
 
String getNote (String name)
 
void setNote (String name, String value)
 
void removeNote (String name)
 
Map< String, String > getNotes ()
 
State getState ()
 
void setState (State state)
 
void restartSession (RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
 
boolean equals (Object o)
 
int hashCode ()
 

関数

UserSessionEntity getEntity ()
 
void update (UserSessionUpdateTask task)
 

非公開変数類

final KeycloakSession session
 
final InfinispanUserSessionProvider provider
 
final InfinispanChangelogBasedTransaction< String, UserSessionEntityuserSessionUpdateTx
 
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntityclientSessionUpdateTx
 
final RealmModel realm
 
final UserSessionEntity entity
 
final boolean offline
 

静的非公開変数類

static final int MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP = 5
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ UserSessionAdapter()

org.keycloak.models.sessions.infinispan.UserSessionAdapter.UserSessionAdapter ( KeycloakSession  session,
InfinispanUserSessionProvider  provider,
InfinispanChangelogBasedTransaction< String, UserSessionEntity userSessionUpdateTx,
InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity clientSessionUpdateTx,
RealmModel  realm,
UserSessionEntity  entity,
boolean  offline 
)
inline
67  {
68  this.session = session;
69  this.provider = provider;
72  this.realm = realm;
73  this.entity = entity;
74  this.offline = offline;
75  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
final RealmModel realm
Definition: UserSessionAdapter.java:58
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx
Definition: UserSessionAdapter.java:54
final boolean offline
Definition: UserSessionAdapter.java:62
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx
Definition: UserSessionAdapter.java:56
final InfinispanUserSessionProvider provider
Definition: UserSessionAdapter.java:52
final KeycloakSession session
Definition: UserSessionAdapter.java:50

関数詳解

◆ equals()

boolean org.keycloak.models.sessions.infinispan.UserSessionAdapter.equals ( Object  o)
inline
319  {
320  if (this == o) return true;
321  if (o == null || !(o instanceof UserSessionModel)) return false;
322 
323  UserSessionModel that = (UserSessionModel) o;
324  return that.getId().equals(getId());
325  }
String getId()
Definition: UserSessionAdapter.java:154

◆ getAuthenticatedClientSessionByClient()

AuthenticatedClientSessionModel org.keycloak.models.sessions.infinispan.UserSessionAdapter.getAuthenticatedClientSessionByClient ( String  clientUUID)
inline

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

105  {
106  AuthenticatedClientSessionStore clientSessionEntities = entity.getAuthenticatedClientSessions();
107  final UUID clientSessionId = clientSessionEntities.get(clientUUID);
108 
109  if (clientSessionId == null) {
110  return null;
111  }
112 
113  ClientModel client = realm.getClientById(clientUUID);
114 
115  if (client != null) {
116  return provider.getClientSession(this, client, clientSessionId, offline);
117  }
118 
119  removeAuthenticatedClientSessions(Collections.singleton(clientUUID));
120  return null;
121  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
final RealmModel realm
Definition: UserSessionAdapter.java:58
UUID get(String key)
Definition: AuthenticatedClientSessionStore.java:62
final boolean offline
Definition: UserSessionAdapter.java:62
ClientModel getClientById(String id)
void removeAuthenticatedClientSessions(Collection< String > removedClientUUIDS)
Definition: UserSessionAdapter.java:126
AuthenticatedClientSessionAdapter getClientSession(UserSessionModel userSession, ClientModel client, UUID clientSessionId, boolean offline)
Definition: InfinispanUserSessionProvider.java:267
AuthenticatedClientSessionStore getAuthenticatedClientSessions()
Definition: UserSessionEntity.java:147
final InfinispanUserSessionProvider provider
Definition: UserSessionAdapter.java:52

◆ getAuthenticatedClientSessions()

Map<String, AuthenticatedClientSessionModel> org.keycloak.models.sessions.infinispan.UserSessionAdapter.getAuthenticatedClientSessions ( )
inline

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

78  {
79  AuthenticatedClientSessionStore clientSessionEntities = entity.getAuthenticatedClientSessions();
80  Map<String, AuthenticatedClientSessionModel> result = new HashMap<>();
81 
82  List<String> removedClientUUIDS = new LinkedList<>();
83 
84  if (clientSessionEntities != null) {
85  clientSessionEntities.forEach((String key, UUID value) -> {
86  // Check if client still exists
87  ClientModel client = realm.getClientById(key);
88  if (client != null) {
89  final AuthenticatedClientSessionAdapter clientSession = provider.getClientSession(this, client, value, offline);
90  if (clientSession != null) {
91  result.put(key, clientSession);
92  }
93  } else {
94  removedClientUUIDS.add(key);
95  }
96  });
97  }
98 
99  removeAuthenticatedClientSessions(removedClientUUIDS);
100 
101  return Collections.unmodifiableMap(result);
102  }
void forEach(BiConsumer<? super String, ? super UUID > action)
Definition: AuthenticatedClientSessionStore.java:58
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
final RealmModel realm
Definition: UserSessionAdapter.java:58
final boolean offline
Definition: UserSessionAdapter.java:62
ClientModel getClientById(String id)
void removeAuthenticatedClientSessions(Collection< String > removedClientUUIDS)
Definition: UserSessionAdapter.java:126
AuthenticatedClientSessionAdapter getClientSession(UserSessionModel userSession, ClientModel client, UUID clientSessionId, boolean offline)
Definition: InfinispanUserSessionProvider.java:267
AuthenticatedClientSessionStore getAuthenticatedClientSessions()
Definition: UserSessionEntity.java:147
final InfinispanUserSessionProvider provider
Definition: UserSessionAdapter.java:52

◆ getAuthMethod()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getAuthMethod ( )
inline

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

192  {
193  return entity.getAuthMethod();
194  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getAuthMethod()
Definition: UserSessionEntity.java:107

◆ getBrokerSessionId()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getBrokerSessionId ( )
inline

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

164  {
165  return entity.getBrokerSessionId();
166  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getBrokerSessionId()
Definition: UserSessionEntity.java:163

◆ getBrokerUserId()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getBrokerUserId ( )
inline

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

169  {
170  return entity.getBrokerUserId();
171  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getBrokerUserId()
Definition: UserSessionEntity.java:171

◆ getEntity()

UserSessionEntity org.keycloak.models.sessions.infinispan.UserSessionAdapter.getEntity ( )
inlinepackage
332  {
333  return entity;
334  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60

◆ getId()

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

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

154  {
155  return entity.getId();
156  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getId()
Definition: UserSessionEntity.java:71

◆ getIpAddress()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getIpAddress ( )
inline

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

187  {
188  return entity.getIpAddress();
189  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getIpAddress()
Definition: UserSessionEntity.java:99

◆ getLastSessionRefresh()

int org.keycloak.models.sessions.infinispan.UserSessionAdapter.getLastSessionRefresh ( )
inline

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

205  {
206  return entity.getLastSessionRefresh();
207  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
int getLastSessionRefresh()
Definition: UserSessionEntity.java:131

◆ getLoginUsername()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getLoginUsername ( )
inline

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

177  {
178  if (entity.getLoginUsername() == null) {
179  // this is a hack so that UserModel doesn't have to be available when offline token is imported.
180  // see related JIRA - KEYCLOAK-5350 and corresponding test
181  return getUser().getUsername();
182  } else {
183  return entity.getLoginUsername();
184  }
185  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
String getLoginUsername()
Definition: UserSessionEntity.java:91
UserModel getUser()
Definition: UserSessionAdapter.java:172

◆ getNote()

String org.keycloak.models.sessions.infinispan.UserSessionAdapter.getNote ( String  name)
inline

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

238  {
239  return entity.getNotes() != null ? entity.getNotes().get(name) : null;
240  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
Map< String, String > getNotes()
Definition: UserSessionEntity.java:139

◆ getNotes()

Map<String, String> org.keycloak.models.sessions.infinispan.UserSessionAdapter.getNotes ( )
inline

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

277  {
278  return entity.getNotes();
279  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
Map< String, String > getNotes()
Definition: UserSessionEntity.java:139

◆ getRealm()

RealmModel org.keycloak.models.sessions.infinispan.UserSessionAdapter.getRealm ( )
inline

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

159  {
160  return realm;
161  }
final RealmModel realm
Definition: UserSessionAdapter.java:58

◆ getStarted()

int org.keycloak.models.sessions.infinispan.UserSessionAdapter.getStarted ( )
inline

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

201  {
202  return entity.getStarted();
203  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
int getStarted()
Definition: UserSessionEntity.java:123

◆ getState()

State org.keycloak.models.sessions.infinispan.UserSessionAdapter.getState ( )
inline

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

282  {
283  return entity.getState();
284  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
UserSessionModel.State getState()
Definition: UserSessionEntity.java:155

◆ getUser()

UserModel org.keycloak.models.sessions.infinispan.UserSessionAdapter.getUser ( )
inline

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

172  {
174  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
final RealmModel realm
Definition: UserSessionAdapter.java:58
String getUser()
Definition: UserSessionEntity.java:83
UserModel getUserById(String id, RealmModel realm)
final KeycloakSession session
Definition: UserSessionAdapter.java:50

◆ hashCode()

int org.keycloak.models.sessions.infinispan.UserSessionAdapter.hashCode ( )
inline
328  {
329  return getId().hashCode();
330  }
String getId()
Definition: UserSessionAdapter.java:154

◆ isOffline()

boolean org.keycloak.models.sessions.infinispan.UserSessionAdapter.isOffline ( )
inline

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

233  {
234  return offline;
235  }
final boolean offline
Definition: UserSessionAdapter.java:62

◆ isRememberMe()

boolean org.keycloak.models.sessions.infinispan.UserSessionAdapter.isRememberMe ( )
inline

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

197  {
198  return entity.isRememberMe();
199  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
boolean isRememberMe()
Definition: UserSessionEntity.java:115

◆ removeAuthenticatedClientSessions()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.removeAuthenticatedClientSessions ( Collection< String >  removedClientUUIDS)
inline

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

126  {
127  if (removedClientUUIDS == null || removedClientUUIDS.isEmpty()) {
128  return;
129  }
130 
131  // Performance: do not remove the clientUUIDs from the user session until there is enough of them;
132  // an invalid session is handled as nonexistent in UserSessionAdapter.getAuthenticatedClientSessions()
133  if (removedClientUUIDS.size() >= MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP) {
134  // Update user session
135  UserSessionUpdateTask task = new UserSessionUpdateTask() {
136  @Override
137  public void runUpdate(UserSessionEntity entity) {
138  removedClientUUIDS.forEach(entity.getAuthenticatedClientSessions()::remove);
139  }
140  };
141  update(task);
142  }
143 
144  // do not iterate the removedClientUUIDS and remove the clientSession directly as the addTask can manipulate
145  // the collection being iterated, and that can lead to unpredictable behaviour (e.g. NPE)
146  List<UUID> clientSessionUuids = removedClientUUIDS.stream()
148  .filter(Objects::nonNull)
149  .collect(Collectors.toList());
150 
151  clientSessionUuids.forEach(clientSessionId -> this.clientSessionUpdateTx.addTask(clientSessionId, Tasks.removeSync()));
152  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
static final int MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP
Definition: UserSessionAdapter.java:123
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336
final InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx
Definition: UserSessionAdapter.java:56
AuthenticatedClientSessionStore getAuthenticatedClientSessions()
Definition: UserSessionEntity.java:147

◆ removeNote()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.removeNote ( String  name)
inline

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

263  {
264  UserSessionUpdateTask task = new UserSessionUpdateTask() {
265 
266  @Override
267  public void runUpdate(UserSessionEntity entity) {
268  entity.getNotes().remove(name);
269  }
270 
271  };
272 
273  update(task);
274  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336

◆ restartSession()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.restartSession ( RealmModel  realm,
UserModel  user,
String  loginUsername,
String  ipAddress,
String  authMethod,
boolean  rememberMe,
String  brokerSessionId,
String  brokerUserId 
)
inline

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

301  {
302  UserSessionUpdateTask task = new UserSessionUpdateTask() {
303 
304  @Override
305  public void runUpdate(UserSessionEntity entity) {
306  provider.updateSessionEntity(entity, realm, user, loginUsername, ipAddress, authMethod, rememberMe, brokerSessionId, brokerUserId);
307 
308  entity.setState(null);
309  entity.getNotes().clear();
310  entity.getAuthenticatedClientSessions().clear();
311  }
312 
313  };
314 
315  update(task);
316  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
final RealmModel realm
Definition: UserSessionAdapter.java:58
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336
void updateSessionEntity(UserSessionEntity entity, RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId)
Definition: InfinispanUserSessionProvider.java:209
final InfinispanUserSessionProvider provider
Definition: UserSessionAdapter.java:52

◆ setLastSessionRefresh()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.setLastSessionRefresh ( int  lastSessionRefresh)
inline

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

209  {
210  UserSessionUpdateTask task = new UserSessionUpdateTask() {
211 
212  @Override
213  public void runUpdate(UserSessionEntity entity) {
214  entity.setLastSessionRefresh(lastSessionRefresh);
215  }
216 
217  @Override
218  public CrossDCMessageStatus getCrossDCMessageStatus(SessionEntityWrapper<UserSessionEntity> sessionWrapper) {
219  return new LastSessionRefreshChecker(provider.getLastSessionRefreshStore(), provider.getOfflineLastSessionRefreshStore())
220  .shouldSaveUserSessionToRemoteCache(UserSessionAdapter.this.session, UserSessionAdapter.this.realm, sessionWrapper, offline, lastSessionRefresh);
221  }
222 
223  @Override
224  public String toString() {
225  return "setLastSessionRefresh(" + lastSessionRefresh + ')';
226  }
227  };
228 
229  update(task);
230  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
LastSessionRefreshStore getLastSessionRefreshStore()
Definition: InfinispanUserSessionProvider.java:163
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336
final boolean offline
Definition: UserSessionAdapter.java:62
LastSessionRefreshStore getOfflineLastSessionRefreshStore()
Definition: InfinispanUserSessionProvider.java:167
UserSessionAdapter(KeycloakSession session, InfinispanUserSessionProvider provider, InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx, InfinispanChangelogBasedTransaction< UUID, AuthenticatedClientSessionEntity > clientSessionUpdateTx, RealmModel realm, UserSessionEntity entity, boolean offline)
Definition: UserSessionAdapter.java:64
final InfinispanUserSessionProvider provider
Definition: UserSessionAdapter.java:52

◆ setNote()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.setNote ( String  name,
String  value 
)
inline

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

243  {
244  UserSessionUpdateTask task = new UserSessionUpdateTask() {
245 
246  @Override
247  public void runUpdate(UserSessionEntity entity) {
248  if (value == null) {
249  if (entity.getNotes().containsKey(name)) {
250  removeNote(name);
251  }
252  return;
253  }
254  entity.getNotes().put(name, value);
255  }
256 
257  };
258 
259  update(task);
260  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336
void removeNote(String name)
Definition: UserSessionAdapter.java:263

◆ setState()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.setState ( State  state)
inline

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

287  {
288  UserSessionUpdateTask task = new UserSessionUpdateTask() {
289 
290  @Override
291  public void runUpdate(UserSessionEntity entity) {
292  entity.setState(state);
293  }
294 
295  };
296 
297  update(task);
298  }
final UserSessionEntity entity
Definition: UserSessionAdapter.java:60
void update(UserSessionUpdateTask task)
Definition: UserSessionAdapter.java:336

◆ update()

void org.keycloak.models.sessions.infinispan.UserSessionAdapter.update ( UserSessionUpdateTask  task)
inlinepackage
336  {
337  userSessionUpdateTx.addTask(getId(), task);
338  }
final InfinispanChangelogBasedTransaction< String, UserSessionEntity > userSessionUpdateTx
Definition: UserSessionAdapter.java:54
String getId()
Definition: UserSessionAdapter.java:154

メンバ詳解

◆ clientSessionUpdateTx

final InfinispanChangelogBasedTransaction<UUID, AuthenticatedClientSessionEntity> org.keycloak.models.sessions.infinispan.UserSessionAdapter.clientSessionUpdateTx
private

◆ entity

final UserSessionEntity org.keycloak.models.sessions.infinispan.UserSessionAdapter.entity
private

◆ MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP

final int org.keycloak.models.sessions.infinispan.UserSessionAdapter.MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP = 5
staticprivate

◆ offline

final boolean org.keycloak.models.sessions.infinispan.UserSessionAdapter.offline
private

◆ provider

final InfinispanUserSessionProvider org.keycloak.models.sessions.infinispan.UserSessionAdapter.provider
private

◆ realm

final RealmModel org.keycloak.models.sessions.infinispan.UserSessionAdapter.realm
private

◆ session

final KeycloakSession org.keycloak.models.sessions.infinispan.UserSessionAdapter.session
private

◆ userSessionUpdateTx

final InfinispanChangelogBasedTransaction<String, UserSessionEntity> org.keycloak.models.sessions.infinispan.UserSessionAdapter.userSessionUpdateTx
private

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