[英]Spring ldap compounded search requests
我是Spring LDAP的新手,並且想了解以下內容。 是否可以在一次搜索中“組合”兩個或更多搜索,同時使用迭代器?
例如,我的代碼現在看起來像這樣:
List result = ldapTemplate.search(baseDn, encode, searchControls2,
genericContextMapper);
BaseDn指向LDAP樹的某個分支,並且genericContextMapper具有一個迭代器,我正在整個代碼中使用它來逐步獲取結果。
但是,如果我要傳遞多個BaseDN,並且每個BaseDN指向完全不同的LDAP分支,又希望迭代器在上一個BaseDN完成后立即從下一個BaseDN開始,該怎么辦? 我可以通過Spring LDAP進行這種鏈接嗎?
我知道我可以通過創建自己的自定義類(僅將結果“粘在一起”)來實現此目的,但是我想知道是否有更簡單的即用型解決方案。
謝謝!
你可以試試這個
<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;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.