2017-04-25 86 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(); 
}