我正在使用最新版本的Jasig CAS服务器(4.0.0)和LDAP服务器。
用户存储在此LDAP结构下:ou=Users,ou=SSOTEST,dc=mycompany,dc=com
我想要的是从顶级搜索用户(例如:ou=SSOTEST,dc=mycompany,dc=com
)。
CAS服务器有一个LdapPersonAttributeDao
bean,它正在寻找与搜索过滤器匹配的对象。以下是此bean的代码:
<bean id="ldapPersonAttributeDao"
class="org.jasig.cas.persondir.LdapPersonAttributeDao"
p:connectionFactory-ref="searchPooledLdapConnectionFactory"
p:baseDN="ou=SSOTEST,dc=company,dc=com"
p:searchControls-ref="searchControls"
p:searchFilter="uid={0}">
<property name="resultAttributeMapping">
<map>
<!--
| Key is LDAP attribute name, value is principal attribute name.
-->
<entry key="memberOf" value="userMemberOf" />
<entry key="cn" value="userCn" />
</map>
</property>
</bean>
现在searchControls
bean在SUBTREE_SCOPE
(2)级别进行查找(根据SearchControls
范围级别值)。
<bean id="searchControls"
class="javax.naming.directory.SearchControls"
p:searchScope="2"
p:countLimit="10" />
当我运行CAS服务器并尝试进行身份验证时,一切正常,但没有返回额外的属性。 我认为问题来自searchScope,它似乎没有被设置为想要的价值。 这是来自服务器的输出日志:
<execute request=[org.ldaptive.SearchRequest@-1312441815::baseDn=ou=SSOTEST,dc=mycompany,dc=com, searchFilter=[org.ldaptive.SearchFilter@-3391
91059::filter=uid={0}, parameters={0=myuser}], returnAttributes=[], searchScope=null, timeLimit=0, sizeLimit=10 [...]
答案 0 :(得分:3)
我知道自问这个问题以来已经有一段时间了。但我设法通过添加:
来解决这个问题<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
到deployerConfigContext.xml。
此问题的原因是未调用LdapPersonAttributeDao中的initalize方法,因为未执行@PostConstruct注释。因此,从未设置过searchScope变量。