我试图在SonarQube(最新)上设置用户映射,以便它可以从LDAP获取组织结构。
我已经在Sonar(1.5.1)上安装了LDAP插件,并创建了一个最小配置来连接这两个:
Error from external users provider: exception Java::OrgSonarApiUtils::SonarException: Unable to retrieve details for user dev1 in <default>
我的所有用户都在example.com域名下:
但是,当我尝试使用LDAP条目登录Sonar时,我在日志中收到以下错误:
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]
...
这非常令人沮丧,因为所有这些属性都是在上面的配置文件中配置的。
有关此问题根源的任何想法?
编辑:
当我将日志深度增加到DEBUG时,我发现了这一点:
{{1}}
我不明白为什么在{}之间应该预期一个整数,与我的LDAP结构相比,这没有多大意义。
答案 0 :(得分:2)
尝试将ldap.user.request
设置为(&(objectClass=inetOrgPerson)(uid={login})
(而不是使用(uid={uid})
)。
LDAP插件无法识别{uid}
,因此不知道如何处理它。然后它将它传递给LDAP javax.naming
API,这会阻塞它。 SonarQube启动时会明确显示此行为(在我的情况下记录):
INFO web [osplLdapSettingsManager]用户映射:LdapUserMapping {baseDn = cn = employees,dc = example,dc = org,request =(&amp;(objectClass = inetOrgPerson)(uid = {uid}))< / strong>,realNameAttribute = cn,emailAttribute = mail}
使用{login}
代替documented default values中显示的关键字)将使LDAP插件构建格式正确的请求,其中包含 {0} :
INFO web [osplLdapSettingsManager]用户映射:LdapUserMapping {baseDn = cn = employees,dc = example,dc = org,request =(&amp;(objectClass = inetOrgPerson)(uid = {0}))< / strong>,realNameAttribute = cn,emailAttribute = mail}
javax.naming
API会将此{0}
替换为SonarQube将设置为您在登录表单中填写的实际用户名值的参数。