簡體   English   中英

在 keycloak 中設置憑據

[英]set credential in keycloak

我有這樣的方法可以在 keycloak 的數據庫中更改用戶的名字。

    public void changeUserFirstname(FirstNameChangeDto firstNameChangeDto) {
    //todo
    log.log(Level.INFO, "requested change of firstname for user " + firstNameChangeDto.getEmail());

    Keycloak keycloak = KeycloakBuilder.builder()
            .serverUrl(config.getKeycloak().getAuthServerUrl())
            .grantType(OAuth2Constants.PASSWORD)
            .realm("master")
            .username(config.getKeycloak().getAdminLogin())
            .password(config.getKeycloak().getAdminPass())
            .clientId(config.getKeycloak().getAdminClientId())
            .build();

    log.info("Found {} realms", keycloak.realms().findAll().size());
    UsersResource usersResource = keycloak.realm(config.getKeycloak().getRealm()).users();

    Optional<UserRepresentation> userRepresentationOptional = usersResource.search(firstNameChangeDto.getEmail()).stream().findFirst();



    if(userRepresentationOptional.isPresent()) {
        UserResource userResource = usersResource.get(userRepresentationOptional.get().getId());
        userResource.setCredentialUserLabel("username", firstNameChangeDto.getFirstName());
        System.out.println("fsfs");
    }else{
        System.out.println("here");
    }
    keycloak.realm("ed24").clearUserCache();
    System.out.println("");

問題是它會引發錯誤

2021-06-07 21:02:16.967 ERROR 1 --- [nio-9080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is    javax.ws.rs.NotFoundException: HTTP 404 Not Found] with root cause

    javax.ws.rs.NotFoundException: HTTP 404 Not Found

如何正確更改用戶的名字? 如何檢查名字的實際 ID? 我猜在這種情況下它是用戶名。 Keycloak 的文檔記錄很差,我在 Google 中搜索短語userResource.setCredentialUserLabel()只給了我文檔和代碼本身。

我發現。 我必須得到UserResource class

        UserResource userResource = getUserResource(keycloak, firstNameChangeDto.getEmail());

然后只是在更新后

        UserRepresentation userRepresentation = userResource.toRepresentation();
        userRepresentation.setFirstName(firstNameChangeDto.getFirstName());

使用更新方法

        userResource.update(userRepresentation);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM