mysql - KeyCloak 用户联盟和动态角色

标签 mysql security wildfly-10 keycloak

我正在使用本指南 http://www.keycloak.org/docs/3.2/server_development/topics/user-storage.html配置用户联盟。这工作正常,我的用户可以登录。

我的用户存储在 Mysql 数据库中。用户有不同的角色 - 也存储在 mysql 中。

我不确定如何向 UserModel 添加角色。

我已经实现了 getUserXXX 方法

例如

@Override
public UserModel getUserByEmail(String email, RealmModel realm) {
    LOGGER.info("LOADING BY EMAIL");
    try (Connection connection = ds.getConnection()) {
        try (PreparedStatement statement = connection.prepareStatement("select * from user where email = ?")) {
            statement.setString(1, email);
            try (ResultSet rs = statement.executeQuery()) {
                if (rs.next()) {
                    UserEntity user = new UserEntity();
                    user.setEmail(rs.getString("email"));
                    user.setId(rs.getString("email"));
                    user.setPassword(rs.getString("password"));
                    return new UserAdapter(session, realm, model, user);
                }
            }
        }
    } catch (SQLException ex) {
        LOGGER.error(ex.getMessage(), ex);
    }

    return null;

}

我现在想为每个登录用户添加特定角色。我该怎么做?

我的 UserAdapter 扩展了 AbstractUserAdapterFederatedStorage

最佳答案

我已经使用如下方法在多个实现中完成了此操作。在 UserModel 而不是 UserEntity 级别执行。

void updateRoles(UserModel user, List<RoleModel> rolesToRemove, List<RoleModel> rolesToAdd)
{
    for (RoleModel role : rolesToRemove)
    {
        user.deleteRoleMapping(role);
    }
    for (RoleModel role : rolesToAdd)
    {
        user.grantRole(role);
    }
}

关于mysql - KeyCloak 用户联盟和动态角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740867/

相关文章:

php - 保护可购买的下载链接

jakarta-ee - Wildfly 与 undertow 嵌入式表演

php - 打印表中的字段名称

php - 使用 PHP cPanel 配置远程 MySQL 访问

java - 是否可以强制 JVM 检查每个 jar 都必须签名?

java - 批量插入导致失败

wildfly-10 - org.dom4j.DocumentFactory 无法转换为 org.dom4j.DocumentFactory

php - 查询结果为 true 而不是 false

mysql - 连接池 : How to deal with prepared statements?

spring-mvc - 使用 Roo 在 Spring MVC 中防止批量分配