java - 用于将 LDAP 用户映射到现有角色的 Nexus REST API

标签 java groovy sonatype nexus3

是否有可能使用 Groovy 脚本将 LDAP 用户映射到现有的 Nexus 角色?我创建了一个 Groovy 脚本,它将在 LDAP 中检查我的员工编号并将 nexus 角色映射到我的用户 ID。

import org.sonatype.nexus.security.role.RoleIdentifier
import org.sonatype.nexus.security.user.User
import org.sonatype.nexus.security.user.UserManager
import org.sonatype.nexus.security.role.NoSuchRoleException
import groovy.json.JsonOutput 
import groovy.json.JsonSlurper 
import groovy.json.JsonBuilder
import java.util.ArrayList
import java.util.HashSet
import java.util.List
import java.util.Set


def id = "NA10009"
def roles = 'dot-maven'
def json = new JsonBuilder()
def root= json id: id, roles: roles 
def roles1 = json.toString()
def role = new JsonSlurper().parseText(roles1)
 log.info("The Role in JSON  : $roles1")

authManager = security.getSecuritySystem().getAuthorizationManager(UserManager.DEFAULT_SOURCE)
 log.info("The authManager  : $authManager")
roles = (role.roles == null ? new HashSet() :role.roles.toSet())
try {
    User user = security.securitySystem.getUser(id, 'LDAP') 
    def existingRole = authManager.getRole(role.roles)
    log.info("The Role  : $existingRole")

    if (user != null) {
        List test = []
        test << existingRole.roleId
         log.info("The Role list  : $test")
        security.setUsersRoles(id,  test)
        log.info("Role of $roles  has been added to $id")
    } else {
        log.warn("$id not found.")
    }

} catch (Exception e) {
    log.error(e.toString())
}

输出为

    org.sonatype.nexus.internal.script.ScriptTask - groovy.lang.MissingMethodException: No signature of method: org.sonatype.nexus.security.internal.DefaultSecuritySystem$$EnhancerByGuice$$20b4f8d.setUsersRoles() is applicable for argument types: (java.lang.String, java.lang.String, java.util.ArrayList) values: [NA10009, [dot-maven]]
Possible solutions: setUsersRoles(java.lang.String, java.lang.String, java.util.Set)

我为角色创建了一个 json 并尝试更新 LDAP 用户。但它会抛出上述错误。

最佳答案

要将 Nexus 角色添加到 LDAP 用户,

import org.sonatype.nexus.security.role.RoleIdentifier;
import org.sonatype.nexus.security.user.User;
import org.sonatype.nexus.security.user.UserManager;

String userId = 'NA10009';
String newRoleId = 'dot-maven'
String realm = 'LDAP'
String role_realm = 'default'

User user = security.securitySystem.getUser(userId, realm)
authManager = security.getSecuritySystem().getAuthorizationManager(UserManager.DEFAULT_SOURCE)
def existingRole = authManager.getRole(newRoleId)
if(user != null) {
    RoleIdentifier newRole = new RoleIdentifier(role_realm, existingRole.roleId);
    user.addRole(newRole)
    security.securitySystem.setUsersRoles(user.getUserId(), realm, user.getRoles());
} else {
    log.warn("No user with ID of $userId found.")
}

关于java - 用于将 LDAP 用户映射到现有角色的 Nexus REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635268/

相关文章:

ruby - Maven 找不到 JRuby mojo 描述符

java - JMeter - 菜单不工作和日志文件中的错误

c# - 相当于 c# 中的 javax.nio.Buffer.flip()

java - 使用jboss5线程池启动线程

java - 使用动态 JVM 语言创建 stub 数据结构的示例?

gradle:如何共享包含我是唯一拥有的信息的build.gradle?

java - 如何过滤 SpatialIndexFeatureCollection?

在 buildSrc 下找不到 gradle 插件依赖项

java - 整数与双倍乘法给出非常奇怪的输出

maven - 使用浏览器/wget 从 Nexus OSS 3.0.0-03 下载 Artifact