我已经开发了Keycloak Provider并将其注册到User Federation中。我的用户存储在MySQL数据库中。它工作正常,每当调用getUserById()时,keycloak就会调用我的已实现方法,并且将返回具有适当角色的用户,并对该用户进行缓存。 当我在外部(在某些其他/外部门户中)更新用户角色时出现问题,现在我想告诉Keycloak使缓存无效(可能通过某些REST API),以便它调用我的getUserById()或getUserByUsername()方法再次。
最好的方法是什么?
谢谢!
答案 0 :(得分:0)
出于身份验证的目的,有时有时不希望使用缓存来处理,您可以在每次调用isValid方法时强制用户存储从数据库加载用户。
在示例中:
我将这段代码放在isValid方法的顶部。
public boolean isValid(RealmModel realm, UserModel user, CredentialInput input)
{
CustomUserAdapter userDb;
if (user instanceof CachedUserModel)
{
userDb = (CustomUserAdapter)this.getUserByUsername(user.getUsername(), realm);
}
else if (user instanceof CustomUserAdapter)
{
userDb = (CustomUserAdapter)user;
}
[...]
Your custom code
[...]
}
另一种方法是通过将“缓存策略”设置为NO_CACHE来更改用户联合设置。