Java Spring ldap混合搜索请求
我是SpringLDAP新手,希望了解以下内容。是否可以在单个搜索中合成2个或多个搜索,同时使用迭代器 例如,我现在的代码如下所示: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
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;}