KeyCloak 用户联盟和动态角色
KeyCloak User Federation AND DYNAMIC ROLES
我正在使用本指南 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);
}
}
我正在使用本指南 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);
}
}