2014-09-02 41 views
0

我只是試着春季ldap/odmnow。看起來很有趣也很酷。對不起,如果下面的問題太笨了!春季Ldap - multipe基地名稱

我試圖用簧LDAP/ODM中檢索某些屬性從出ldap.Is存在

或者配置多個基地名稱的方式

@Entry(objectClasses = {「person」} base = {..我可以在這裏給出多個BASENAME ..}) public class LdapUser {

@Id 
private Name dn; 

我正在開發的應用程序定義了一個OU下的用戶和我們AD中另一個OU中定義的內部TESTER。所以我試圖看看是否可以使用相同的ldap入門級來查找每個人。

+0

下面的一塊接到我的文章編輯了以上。我也想知道是否有一種方法來配置 Zak 2014-09-02 22:27:26

回答

0

我對Spring LDAP不是很熟悉,但是(IIRC)LDAP本身只能從單個節點(base)進行搜索。因此,查看the documentation,您可能必須使用LDAPQueryBuilder從組織(o=xx)進行搜索,爲ou添加條件。見the javadocs

+0

由於加里! Ldapquerybuilder是我的另一種選擇。我可能會實現它tomorow – Zak 2014-09-03 02:30:56

0

這裏沒有專家,介意你。 至少使用XML配置,您可以連線一個LdapTemplate實例。一個建議可能是創建一個名爲DelegatingLdapTemplate的新實現,該實現注入兩個常規模板(每個基本名稱一個),然後適當地委託給它們(或者只調用一個,然後另一個如果第一個返回0結果),以及使用這個來代替普通的模板實例。這當然只有在你的用例確實保證這種行爲時纔有意義(例如,如果你永遠不知道在哪裏搜索用戶並且必須檢查兩個位置)。否則,只需製作兩個獨立的豆子。

+0

謝謝kaqqao!我確實考慮過這些選項。我覺得他們是更多的解決方法。我希望ldap:contextsource將採用一組基本名稱,在ldap中爲不同節點(ou)下的條目進行簡單查找,並且省去我的鍋爐板代碼:)... – Zak 2014-09-03 02:34:30

+0

如果您將ContextSource的數組基地名稱,框架如何知道何時使用哪個基地? – marthursson 2014-09-04 05:16:46

1

ContextSource基地旨在指定所有基地ContextSource上的操作,並且通常設置爲域控制器DN。

您可以在沒有在@Entry上指定基地(或在樹中使用較高基準DN)的情況下使用ODM,但在這種情況下,您通常會使用@DnAttribute批註以使框架自動爲您生成DN (主要在將條目保留回LDAP時需要)。

如果我們假設你的用戶的結構如下:

dc=example,dc=com,ou=USERS

dc=example,dc=com,ou=TESTERS

現在,如果你在好的ContextSource指定基地dc=example,dc=com你可以有ODM自動處理此簡要介紹如下:

@Entry(objectclasses={"person"}) 
public class Person { 
    @Id 
    private Name dn; 

    @DnAttribute(name="ou", index=0) 
    @Transient // Indicates that this is not an attribute on the entry 
    private String userType; 

    @Attribute(name="cn") 
    private String name; 

    // More attributes here 
} 

上面將處理自動映射來自Person類的LDAP條目。現在,如果你想找到所有的人,這樣做:

List<Person> allPersons = ldapTemplate.findAll(Person.class); 

如果你想找到所有的測試,你會做:

List<Person> testers = ldapTemplate.find(
          query().base("ou=TESTERS"), 
          Person.class); 
+0

謝謝。我確實讓它在昨天工作。定義了兩個ldaptemplates /上下文源和沒有基本名稱的入口類 - 並製作了ldaptemplate1.findone()和ldaptemplate2.findone()。我的請求非常簡單...需要使用電子郵件ID從ldap獲取fname和lname ...我爲隨後的讀取緩存信息...不想過度設計它。 – Zak 2014-09-04 12:45:09