gpt4 book ai didi

java - Keycloak API createUser Java

转载 作者:行者123 更新时间:2023-12-02 02:03:43 24 4
gpt4 key购买 nike

我使用的示例 Java 代码:

public static AjaxResponse createUser(User newUser) {

Keycloak keycloak = Keycloak.getInstance(
SERVER_URL,
REALM,
USERNAME,
PASSWORD,
CLIENT_ID);

// Get Realm
RealmResource realmResource = keycloak.realm(REALM);
UsersResource userResource = realmResource.users();

// Create User Representation
UserRepresentation user = getUserRepresentation(newUser);

// Create user (requires manage-users role)
try {
System.out.println("Username: {}", userResource.get("USER-ID-HERE").toRepresentation().getUsername());
System.out.println("Count: " + userResource.count());
Response response = userResource.create(user);
System.out.println("Response: " + response.getStatusInfo());
System.out.println("Response: " + response.getStatus());
System.out.println("Response: " + response.getMetadata());

} catch (Exception e) {
System.out.println(ExceptionUtils.getStackTrace(e));
return new AjaxResponse("Fail", false);
}

return new AjaxResponse("Successful User Creation", true);
}

private static UserRepresentation getUserRepresentation(User newUser) {

UserRepresentation user = new UserRepresentation();
user.setEnabled(true);
user.setUsername(newUser.getUsername());
user.setFirstName(newUser.getFirstName());
user.setLastName(newUser.getLastName());
user.setEmail(newUser.getEmail());

CredentialRepresentation credentialRepresentation = new CredentialRepresentation();
credentialRepresentation.setTemporary(true);
credentialRepresentation.setType(CredentialRepresentation.PASSWORD);
credentialRepresentation.setValue(newUser.getUsername());
user.setCredentials(Collections.singletonList(credentialRepresentation));

}

运行代码时得到的响应:

Username: USERNAME Correctly Identified here
Count: 98
Response: Conflict
Response: 409
Response: [Connection=keep-alive,Content-Length=46,Content-Type=application/json,Date=Tue, 03 Jul 2018 15:27:58 GMT,Server=WildFly/10,X-Powered-By=Undertow/1]`

一些想法:我添加了计数,以便确定整个连接是否正常工作。而且看起来返回的计数是正确的。因此,我成功连接到 keycloak,但当我尝试创建用户时,出现了其他问题。

我的 pom.xml 中的依赖项

    <dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-servlet-filter-adapter</artifactId>
<version>3.2.1.Final</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>3.2.1.Final</version> (Have also tried 3.1.0.Final and 3.2.0.Final)
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.1.4.Final</version>
</dependency>

据我了解,这些依赖关系也是相关的:

    <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-version}</version>
</dependency>

其他信息:

我使用的Keycloak版本:3.2.0

Keycloak API 可以找到 here

有关 HTTP 409 代码的更多信息,请访问 here

我非常感谢任何帮助或指导。注意 凭证和所有变量均已检查一次、两次、三次和十次。我一直在寻找一个完整的工作示例。但大多数都未能指定所需的依赖项,因此我的代码失败。

注意:我也在使用 Tomcat-8,并且正在更深入地研究该问题。我发现Tomcat8可能有一些特殊的配置。请注意,我的网络应用程序的身份验证登录注销已按预期工作。

最佳答案

我终于让它工作了。这是解决方案以供将来引用。

UserRepresentation userRepresentation = new UserRepresentation();
userRepresentation.setUsername("randomUser");
Response response = usersResource.create(userRepresentation);
logger.info("Response | Status: {} | Status Info: {}", response.getStatus(), response.getStatusInfo());
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
UserResource userResource = usersResource.get(userId);

然后我用更多信息更新 userResource。

关于java - Keycloak API createUser Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51158642/

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