0

我正在尝试使用 admin-client SDK 从 Keyclock 中获取一些用户数据。我已经像这样构建了客户端:

Keycloak kc = KeycloakBuilder.builder() //
            .serverUrl("some_url")
            .realm("some-realm")
            .username("admin") //
            .password("password") //
            .clientId("curl")
            .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).connectionCheckoutTimeout(10, TimeUnit.SECONDS).build()) //
            .build();

    System.out.println("built");
    UsersResource baz = kc.realm(keycloakConfiguration.getRealm()).users();
    System.out.println(baz.count());

似乎发生的事情是,我的程序在尝试获取时无限期挂起baz——我的调试器从未命中它。我不太确定发生了什么 - 我的凭据是正确的。导致构建器 1. 在特定时间段后失败或 2.验证我的凭据是否正确的正确方法是什么?调试非常令人沮丧。

4

1 回答 1

1

您可以创建一个自定义方法来检查您的客户是否“在线”。此方法可能如下所示:

public boolean isKeycloakClientValid(Keycloak keycloakClient) {
    try {
        tryToPingKeycloak(keycloakClient);
    } catch (Exception e) {
        logger.error("Error while pinging the keycloak server", e);
        return false;
    }
    return true;
}

使用帮助方法:

private void tryToPingKeycloak(KeycloakClient keycloakClient) {
    keycloakClient.serverInfo().getInfo();
}

现在您可以在使用之前检查您的客户端:

if (isKeycloakClientValid(kc)) {
    UsersResource baz = kc.realm(keycloakConfiguration.getRealm()).users();
}
于 2017-05-03T10:33:45.480 回答