在我的服务类中,我有一个函数可以删除除作为参数传递的用户之外的所有用户
public void deleteWhereNotIn(List<String> keep){
List<UserRepresentation> users = keycloak
.realm(realm)
.users().list();
List<String> remove = new ArrayList<>();
for(UserRepresentation user : users){
if (user.getRealmRoles() != null && user.getRealmRoles().stream().anyMatch(role -> role.equals("ADMIN")))
continue;
if (keep.stream().noneMatch(uid -> uid.equals(user.getId())))
remove.add(user.getId());
}
for(String uid : remove)
delete(uid);
}
我看不出我的逻辑有任何问题,但是users
的长度为100
,即使我有更多,并且user.getRealmRoles
始终为null
1条答案
按热度按时间3npbholx1#
我看不出我的逻辑有什么问题,但是用户的长度是100,尽管我有
如果您查看了Admin Rest API文档,您可以阅读
Query max可选最大结果大小(默认为100)整数(int32)
这基本上就是使用
list()
时的情况。尝试使用列表(Integer firstResult,Integer maxResults)而不是列表。对于
maxResults
,分别将firstResult
设置为0
和-1
。用户. getRealmRoles始终为空
此端点似乎存在错误(已报告here)。
您可以使用keycloak discourse group上介绍的解决方法。
比如: