CAS LDAP搜索子树

时间:2014-08-25 12:35:49

标签: ldap cas jasig

我正在使用最新版本的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 [...]

1 个答案:

答案 0 :(得分:3)

我知道自问这个问题以来已经有一段时间了。但我设法通过添加:

来解决这个问题
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

到deployerConfigContext.xml。

此问题的原因是未调用LdapPersonAttributeDao中的initalize方法,因为未执行@PostConstruct注释。因此,从未设置过searchScope变量。