在密钥斗篷中设置凭据
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);
我有这样的方法可以在 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);