首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keycloak Java

Keycloak Java
EN

Stack Overflow用户
提问于 2018-07-03 15:50:41
回答 3查看 16.4K关注 0票数 5

我使用的示例Java代码:

代码语言:javascript
复制
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));

}

运行代码时得到的响应:

代码语言:javascript
复制
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中的依赖项

代码语言:javascript
复制
    <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>

据我所知,这些依赖关系也是相关的:

代码语言:javascript
复制
    <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

密钥披风API可以找到这里

有关HTTP409代码的更多信息可以找到这里

我将非常感谢任何帮助或指导。注凭据和所有变量已被检查一次、两次、三次和十次。我一直在寻找一个完整的例子。但是大多数代码都没有指定所需的依赖项,因此我的代码失败了。

注意:我也在使用Tomcat-8,因为我正在对这个问题进行更深入的研究。我看到Tomcat8可能有一些特殊的配置。请注意,我的web应用程序的身份验证登录签出已经按照预期工作了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-06 08:45:00

我终于让它开始工作了。以下是解决方案,供今后参考。

代码语言:javascript
复制
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。

票数 8
EN

Stack Overflow用户

发布于 2018-07-03 18:49:40

409冲突http状态给出了提示。

Keycloak创建用户,如果用户名或电子邮件被重用,通常会返回冲突。检查以确保所创建的资源包含与已在某个领域中注册的资源不同的用户名和电子邮件。

检查的简单方法:-登录到管理控制台-导航到领域-导航到用户选项卡-类型用户名和搜索或电子邮件和搜索

票数 0
EN

Stack Overflow用户

发布于 2020-12-10 17:18:11

代码语言:javascript
复制
@Override
public UserDto registerNewUserAccount(final UserDto accountDto) {
    String keycloakPassword = accountDto.getPassword();

    accountDto.setPassword(passwordEncoder.encode(accountDto.getPassword()));
    accountDto.setEnabled(1);
    UserDto user = userRepository.save(accountDto);

    AuthorityDto role = new AuthorityDto();
    role.setUserName(accountDto.getLogin());
    role.setAuthority("ROLE_USER");

    authorityRepository.save(role);

    Keycloak kc = Keycloak.getInstance(
            "https://www.zdslogic.com/keycloak/auth",  /your server
            "zdslogic",  //your realm
            "richard.campion", //user 
            "Changit", //password
            "admin-cli"); //client


    CredentialRepresentation credential = new CredentialRepresentation();
    credential.setType(CredentialRepresentation.PASSWORD);
    credential.setValue(keycloakPassword);

    UserRepresentation keycloakUser = new UserRepresentation();
    keycloakUser.setUsername(accountDto.getLogin());
    keycloakUser.setFirstName(accountDto.getFirstName());
    keycloakUser.setLastName(accountDto.getLastName());
    keycloakUser.setEmail(accountDto.getEmail());
    keycloakUser.setCredentials(Arrays.asList(credential));
    keycloakUser.setEnabled(true);
    keycloakUser.setRealmRoles(Arrays.asList("user"));

    // Get realm
    RealmResource realmResource = kc.realm("zdslogic");
    UsersResource usersRessource = realmResource.users();

    // Create Keycloak user
    Response result = null;
    try {
        result = usersRessource.create(keycloakUser);
    } catch(Exception e) {
        System.out.println(e);
    }

    if (result==null || result.getStatus() != 201) {
        System.err.println("Couldn't create Keycloak user.");
    }else{
        System.out.println("Keycloak user created.... verify in keycloak!");
    }

    return user;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51158642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档