2017-04-25 91 views
0

我试图使用管理客户端SDK从Keycloack中获取一些用户数据。我已经建立了客户端,像这样:Keycloack管理客户端试图发出请求时挂起

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当无限期挂起 - 我调试嗟它。我不太确定发生了什么 - 我的凭据是正确的。什么是导致建造者在特定时间段后失败的正确方法,或者2.验证我的凭证是正确的?调试令人沮丧。

回答

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; 
} 

随着help方法:

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

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

if (isKeycloakClientValid(kc)) { 
    UsersResource baz = kc.realm(keycloakConfiguration.getRealm()).users(); 
}