You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java Spring项目中不使用Adapter获取Keycloak额外Realm的用户会话

查看Keycloak指定Realm的用户会话(Spring Boot实现)

依赖准备

确保项目中引入Keycloak管理客户端依赖,以Maven为例:

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-admin-client</artifactId>
    <version>对应你的Keycloak版本</version>
</dependency>

修改代码实现会话查询

你的现有代码仅获取了Realm资源实例,未调用会话查询API,以下是完整的实现代码:

import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.KeycloakBuilder;
import org.keycloak.admin.client.resource.RealmResource;
import org.keycloak.representations.idm.UserSessionRepresentation;

import java.util.List;

public class KeycloakSessionViewer {
    public static void main(String[] args) {
        // 初始化Keycloak管理客户端
        Keycloak keycloak = KeycloakBuilder
                .builder()
                .serverUrl("http://localhost:8080/auth")
                .realm("master") // 通过master域完成身份认证
                .username("admin")
                .password("admin")
                .clientId("admin-cli") // 需使用具备Realm管理权限的客户端,默认admin-cli符合要求
                .build();

        // 获取目标springboot Realm的资源
        RealmResource realmResource = keycloak.realm("springboot");

        // 查询该Realm下所有用户会话
        List<UserSessionRepresentation> userSessions = realmResource.sessions().getUserSessions();

        // 遍历输出会话详情
        for (UserSessionRepresentation session : userSessions) {
            System.out.println("会话ID: " + session.getId());
            System.out.println("关联用户ID: " + session.getUserId());
            System.out.println("用户名: " + session.getUsername());
            System.out.println("关联客户端列表: " + session.getClients());
            System.out.println("会话创建时间: " + session.getStart());
            System.out.println("最后活跃时间: " + session.getLastSessionRefresh());
            System.out.println("------------------------------");
        }

        // 关闭客户端连接
        keycloak.close();
    }
}

关键注意事项

  • 客户端权限:必须使用拥有Realm管理权限的客户端,默认的admin-cli是Keycloak自带的管理客户端,直接可用;若使用自定义客户端,需为其分配realm-management客户端下的view-sessions、view-users等角色。
  • 用户权限:用于登录的用户(示例中为admin)需要具备springboot Realm的会话查看权限,或拥有全局管理权限。
  • 会话字段:UserSessionRepresentation包含会话的核心元数据,可根据业务需求提取对应字段做进一步处理。

内容的提问来源于stack exchange,提问作者Eqnuhy77G2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:32:37