java Keycloak管理客户端Spring -列出具有领域角色的所有用户

np8igboo  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(174)

在我的服务类中,我有一个函数可以删除除作为参数传递的用户之外的所有用户

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

3npbholx

3npbholx1#

我看不出我的逻辑有什么问题,但是用户的长度是100,尽管我有
如果您查看了Admin Rest API文档,您可以阅读
Query max可选最大结果大小(默认为100)整数(int32)
这基本上就是使用list()时的情况。
尝试使用列表(Integer firstResult,Integer maxResults)而不是列表。对于maxResults,分别将firstResult设置为0-1
用户. getRealmRoles始终为空
此端点似乎存在错误(已报告here)。
您可以使用keycloak discourse group上介绍的解决方法。
比如:

keycloak.realm(realm)
        .users()
        .get(userId)
        .roles()
        .realmLevel()
        .listEffective()

相关问题