gpt4 book ai didi

java - 如何以编程方式(java)更新keycloak的用户详细信息,而不使用rest admin api?

转载 作者:行者123 更新时间:2023-12-01 06:22:26 25 4
gpt4 key购买 nike

我想更新用户详细信息。例如我从 keycloak 管理控制台在“演示”领域创建了用户(k1)。我有一个 java 客户端,我想更新用户(k1)详细信息,例如。更改用户 k1 的电子邮件地址。

我使用了管理客户端(Rest API),如下所示。

public void updateEmail(final String newEmailAddress) {
try {
final AccessToken accessToken = getToken();
Keycloak keycloak = KeycloakBuilder.builder().serverUrl(this.getDeployment().getAuthServerBaseUrl())
.realm(this.getDeployment().getRealm()).username("k1").password("123").clientId(ADMIN_CLIENT)
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()).build();

UserResource userResource = keycloak.realm(this.getDeployment().getRealm()).users()
.get(accessToken.getSubject());
UserRepresentation user = userResource.toRepresentation();
user.setEmail(newEmailAddress);
userResource.update(user);

} catch (Exception exception) {
exception.printStackTrace();
}
}

但我想在不使用管理客户端的情况下执行相同的操作。

最佳答案

您可以使用 jsoup-1.6.0.jar 更新任何用户的详细信息,如下所示。

public boolean updateAccountDetails(String name, String value) 
{
String url= getKeycloakAdapter().getDeployment().getAccountUrl();

Document document = Jsoup.connect(url).get();
if (document != null) {
String formQuery = String.format("form[action^=%s]", url);
Elements form = document.select(formQuery);
if (!form.isEmpty()) {
Elements inputs = form.select("input[value], input:not([disabled])");
Element saveAction = form.select("button[value=Save]").first();
inputs.add(saveAction);
Map<String, String> mandatoryArguments = new HashMap<>();
for (Element input : inputs) {
mandatoryArguments.put(input.attr("name"), input.attr("value"));
}
mandatoryArguments.put(attributeName, newValue);
Response response = Jsoup.connect(accountUrl)
.data(mandatoryArguments)
.method(Method.POST)
.execute();

Document finalDoc = response.parse();
if (finalDoc != null) {
Elements finalForm = finalDoc.select(formQuery);
if (finalForm != null) {
String newValueQuery = String.format("input[name=%s], input[value=%s]", name, value);
Elements finalInputs = finalForm.select(newValueQuery);
if (finalInputs != null) {
return !finalInputs.isEmpty();
}
}
}
}
}
throw new IOException("Account page not found");

}

关于java - 如何以编程方式(java)更新keycloak的用户详细信息,而不使用rest admin api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com