mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-10 15:32:05 -03:30
Caches the id-to-user mapping for the evaluation in the current session (#32139)
Closes #31519 Signed-off-by: Alexander Schwartz <aschwart@redhat.com>
This commit is contained in:
parent
4875c117a3
commit
18649c9a99
@ -168,20 +168,34 @@ public class DefaultEvaluation implements Evaluation {
|
||||
return user.isMemberOf(group);
|
||||
}
|
||||
|
||||
private final String USER_CACHE_SESSION_ATTRIBUTE = DefaultEvaluation.class.getName() + ".userCache";
|
||||
private UserModel getUser(String id, KeycloakSession session) {
|
||||
RealmModel realm = session.getContext().getRealm();
|
||||
UserModel user = session.users().getUserById(realm, id);
|
||||
@SuppressWarnings("unchecked") HashMap<String, UserModel> cache = (HashMap<String, UserModel>) session.getAttribute(USER_CACHE_SESSION_ATTRIBUTE);
|
||||
if (cache == null) {
|
||||
cache = new HashMap<>();
|
||||
session.setAttribute(USER_CACHE_SESSION_ATTRIBUTE, cache);
|
||||
}
|
||||
UserModel user = cache.get(id);
|
||||
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getUserByUsername(realm ,id);
|
||||
}
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getUserByEmail(realm, id);
|
||||
}
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getServiceAccount(realm.getClientById(id));
|
||||
if (cache.containsKey(id)) {
|
||||
return null;
|
||||
}
|
||||
RealmModel realm = session.getContext().getRealm();
|
||||
user = session.users().getUserById(realm, id);
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getUserByUsername(realm, id);
|
||||
}
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getUserByEmail(realm, id);
|
||||
}
|
||||
if (Objects.isNull(user)) {
|
||||
user = session.users().getServiceAccount(realm.getClientById(id));
|
||||
}
|
||||
}
|
||||
|
||||
cache.put(id, user);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user