Плащ Java. Попробуйте создать нового пользователя с установленным паролем - PullRequest
0 голосов
/ 06 августа 2020

Keycloak 11.0. Я пытаюсь создать нового пользователя в Keycloak через конечную точку REST администратора сервера Keycloak. Я столкнулся с трассировкой стека на сервере Keycloak, как показано ниже.

0 8:59:40,744 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-4) Uncaught server error: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<org.keycloak.representations.idm.CredentialRepresentation>` out of VALUE_STRING token
at [Source: (io.undertow.servlet.spec.ServletInputStreamImpl); line: 1, column: 141] (through reference chain: org.keycloak.representations.idm.UserRepresentation["credentials"])

Мой код, как показано ниже.

private void sendCreateUserRequest(UserEntity userEntity, KeycloakTokenModel keycloakTokenModel) throws JsonProcessingException {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setBearerAuth(keycloakTokenModel.getAccessToken());
        JsonObject properties = new JsonObject();
        properties.addProperty(FIRST_NAME, userEntity.getFirstName());
        properties.addProperty(LAST_NAME, userEntity.getLastName());
        properties.addProperty(EMAIL, userEntity.getEmail());
        properties.addProperty(ENABLED, DEFAULT_ENABLED_OPTION);
        properties.addProperty(USERNAME, userEntity.getEmail());
        String credentialsArray = mapToCredentialsArray(userEntity.getPassword());
        properties.addProperty(CREDENTIALS, credentialsArray);
        String propertiesString = properties.toString();
        HttpEntity<String> request = new HttpEntity<>(propertiesString, headers);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.postForObject(userEndpoint, request, String.class);
    }

В отладчике я вижу

propertiesString = 
{
"firstName":null,
"lastName":null,
"email":"Tester_Testerov@some.com",
"enabled":"true",
"username":"Tester_Testerov@some.com",
"credentials":
"[
 {\"value\":\"verystrongpassword4\",\"type\":\"password\",\"temporary\":false}
]"
}

Но без эта строка String credentialsArray = mapToCredentialsArray (userEntity.getPassword ()); он работает, но я хочу установить учетные данные для пользователя в этом запросе. Пожалуйста, помогите

1 Ответ

0 голосов
/ 06 августа 2020

Просто плохо отформатирован json. Убедитесь, что ваш массив начинается и заканчивается на ", и это недопустимый синтаксис для массивов json. Я думаю, что properties.addProperty(CREDENTIALS, credentialsArray); экранирует ваш массив с помощью символа ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...