簡體   English   中英

Spring ldap復合搜索請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM