Клиент администратора Keycloack зависает при попытке сделать запрос

Я пытаюсь получить некоторые пользовательские данные из Keycloack с помощью SDK администратора-клиента. Я построил клиента так:

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. проверить правильность моих учетных данных? Отладка безумно утомительна.


person Clicquot The Dog    schedule 25.04.2017    source источник


Ответы (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();
}
person David Klassen    schedule 03.05.2017