我是Spring LDAP的新手,想了解以下内容。是否可以在一个搜索中“复合”2个或更多个搜索,同时使用迭代器?
例如,我的代码现在看起来像这样:
List result = ldapTemplate.search(baseDn, encode, searchControls2,
genericContextMapper);
BaseDn指向LDAP树的某个分支,genericContextMapper有一个迭代器,我通过我的代码逐渐获取结果。
但是如果我想传递超过1个BaseDN,每个指向完全不同的LDAP分支,我希望迭代器一旦完成前一个就开始使用下一个BaseDN?我可以通过Spring LDAP进行这种链接吗?
我知道我可以通过创建我自己的自定义类来实现这一目标,这个类只是将结果“粘在一起”,但我想知道是否有更简单的开箱即用解决方案。
谢谢!
答案 0 :(得分:0)
你可以试试这个
<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" />
OUUserSearch是
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;}