Java Spring ldap混合搜索请求

Java Spring ldap混合搜索请求,java,ldap,spring-ldap,Java,Ldap,Spring Ldap,我是SpringLDAP新手,希望了解以下内容。是否可以在单个搜索中合成2个或多个搜索,同时使用迭代器 例如,我现在的代码如下所示: List result = ldapTemplate.search(baseDn, encode, searchControls2, genericContextMapper); BaseDn指向LDAP树的某个分支,genericContextMapper有一个迭代器,我在代码中使用它来逐步获取结果 但是,如果我想传递多个Bas

我是SpringLDAP新手,希望了解以下内容。是否可以在单个搜索中合成2个或多个搜索,同时使用迭代器

例如,我现在的代码如下所示:

    List result = ldapTemplate.search(baseDn, encode, searchControls2,
            genericContextMapper);
BaseDn指向LDAP树的某个分支,genericContextMapper有一个迭代器,我在代码中使用它来逐步获取结果

但是,如果我想传递多个BaseDN,每个BaseDN指向完全不同的LDAP分支,并且我希望迭代器在完成上一个BaseDN之后立即开始下一个BaseDN,该怎么办?我可以通过SpringLDAP进行这种链接吗

我知道我可以通过创建自己的自定义类来实现这一点,这些自定义类只是将结果粘在一起,但我想知道是否有一个更简单的开箱即用的解决方案

谢谢

你可以试试这个

<bean id="authenticator" class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator">
    <constructor-arg ref="contextSource"/>
    <property name="userSearch" ref="userSearch" />
</bean> 

<bean id="userSearch" class="com.security.OUUserSearch">
    <property name="userSearches" ref="userSearches" />
</bean>

<util:list id="userSearches">
    <ref bean="userSearch1" />
    <ref bean="userSearch2" />
</util:list>

<bean id="userSearch1" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <constructor-arg value="OU=test1" />
    <constructor-arg value="(uid={0})" />
    <constructor-arg ref="contextSource"/>
    <property name="searchSubtree" value="true" />

</bean>
<bean id="userSearch2" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <constructor-arg value="OU=test2" />
    <constructor-arg value="(uid={0})" />
    <constructor-arg ref="contextSource"/>
    <property name="searchSubtree" value="true" />
而用户搜索是

public class OUUserSearch implements LdapUserSearch   
{
List<LdapUserSearch> myUserSearches = null;

public DirContextOperations searchForUser(String theUsername)
{
    DirContextOperations theResult = null;  
    for(LdapUserSearch aSearch : myUserSearches)
    {
        try
        {
            theResult = aSearch.searchForUser(theUsername);
            if (theResult != null)
            {
                // we are done
                break;
            }
        }
        catch (Exception e)
        {
            String aMessage = e.getLocalizedMessage();
            task.debug(aMessage);
        }
    }
    if (theResult == null)
    {
        throw new UsernameNotFoundException("Unable to authenticate user (" + theUsername + ")");
    }
    return theResult;
}

public List<LdapUserSearch> getUserSearches() { return myUserSearches;}
public void setUserSearches(List<LdapUserSearch> theSearches) {myUserSearches = theSearches;}