Can';t将SonarQube连接到LDAP目录以进行用户映射

Can';t将SonarQube连接到LDAP目录以进行用户映射,ldap,sonarqube,Ldap,Sonarqube,我正在尝试在SonarQube(最新版本)上设置用户映射,以便它可以从LDAP获取组织结构 我已经在Sonar(1.5.1)上安装了LDAP插件,并创建了连接这两个插件的最低配置: # General Configuration sonar.security.realm=LDAP ldap.url=ldap://ldap:389 # User Mapping ldap.user.baseDn=ou=users,ou=udd,dc=example,dc=com ldap.user.request

我正在尝试在SonarQube(最新版本)上设置用户映射,以便它可以从LDAP获取组织结构

我已经在Sonar(1.5.1)上安装了LDAP插件,并创建了连接这两个插件的最低配置:

# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://ldap:389

# User Mapping
ldap.user.baseDn=ou=users,ou=udd,dc=example,dc=com
ldap.user.request=(&(objectClass=inetOrgPerson)(uid={uid}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
我的所有用户都在example.com域下:

但是,当我尝试使用LDAP条目登录到Sonar时,日志中出现以下错误:

Error from external users provider: exception Java::OrgSonarApiUtils::SonarException: Unable to retrieve details for user dev1 in <default>

我不明白为什么在{}之间应该有一个整数,这与我的LDAP结构相比没有多大意义。

尝试将
LDAP.user.request
设置为
(&(objectClass=inetOrgPerson)(uid={login})
(而不是使用
(uid={uid})

细节: LDAP插件无法识别
{uid}
,因此不知道如何处理它。然后,它将其传递给LDAP
javax.naming
API,该API会对此产生阻塞。此行为在SonarQube启动时明确显示(在我的案例中为日志):

信息网[o.s.p.l.LdapSettingsManager]用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org,request=(&(objectClass=inetOrgPerson)(uid={uid})),realNameAttribute=cn,emailAttribute=mail}

改为使用
{login}
(中显示的关键字)将允许LDAP插件使用{0}构建格式良好的请求:

信息网[o.s.p.l.LdapSettingsManager]用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org,request=(&(objectClass=inetOrgPerson)(uid={0})),realNameAttribute=cn,emailAttribute=mail}


javax.naming
API将用一个参数替换此
{0}
,该参数将设置为您在登录表单中填写的实际用户名值。

尝试将
ldap.user.request
设置为
(&(objectClass=inetOrgPerson)(uid={login})
(而不是使用
(uid={uid})

细节: LDAP插件无法识别
{uid}
,因此不知道如何处理它。然后,它将其传递给LDAP
javax.naming
API,该API会对此产生阻塞。此行为在SonarQube启动时明确显示(在我的案例中为日志):

信息网[o.s.p.l.LdapSettingsManager]用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org,request=(&(objectClass=inetOrgPerson)(uid={uid})),realNameAttribute=cn,emailAttribute=mail}

改为使用
{login}
(中显示的关键字)将允许LDAP插件使用{0}构建格式良好的请求:

信息网[o.s.p.l.LdapSettingsManager]用户映射:LdapUserMapping{baseDn=cn=employees,dc=example,dc=org,request=(&(objectClass=inetOrgPerson)(uid={0})),realNameAttribute=cn,emailAttribute=mail}

然后,
javax.naming
API将用一个参数替换此
{0}
,该参数将设置为您在登录表单中填写的实际用户名值

2016.01.25 05:54:27 DEBUG web[o.s.p.l.LdapContextFactory] Initializing LDAP context {java.naming.provider.url=ldap://ldap:389, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, com.sun.jndi.ld
ap.connect.pool=true, java.naming.security.authentication=simple, java.naming.referral=follow}
2016.01.25 05:54:27 DEBUG web[o.s.p.l.LdapUsersProvider] integer expected inside {}: (&(objectClass=inetOrgPerson)(uid={uid}))
javax.naming.directory.InvalidSearchFilterException: integer expected inside {}: (&(objectClass=inetOrgPerson)(uid={uid}))
        at com.sun.jndi.toolkit.dir.SearchFilter.format(SearchFilter.java:602) ~[na:1.7.0_95]
        at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1785) ~[na:1.7.0_95]
...