簡體   English   中英

查詢LDAP結構未知的LDAP服務器

[英]Querying LDAP Server Where LDAP Structure Not Known

我正在為公司使用Spring開發Java。 我們正在開發一個具有本地LDAP服務器的應用程序。 LDAP服務器將用於獲取信息。 但是,我們不希望應用程序的用戶知道LDAP結構/架構。 這是因為客戶/用戶將擁有自己的LDAP服務器和LDAP結構/架構。

例如,客戶/用戶將通過提供將用於連接LDAP服務器的LDAP服務器詳細信息,通過用戶界面獲取信息。 連接后,他們將能夠通過執行查詢來獲取信息。 現在,他們將不知道有關LDAP結構的信息。 將通過執行用戶查詢來完成將要編寫的代碼。 如果查詢正在運行,則它將返回該信息,否則將給出異常。

我面臨的問題是:

當您使用Spring LDAP時,有一個叫做AttributesMapper和ContextMapper的東西。 為了使用它,我必須傳遞一個強類型的對象。 因此,例如:

public class EmployeeAttributesMapper implements AttributesMapper {

public EmployeeAttributesMapper() {

}

/**
 * This method maps the Employee Entity to data stored in the LDAP Server through a Attribute.
 * @param attrs the name of the Attribute to get
 * @return the Employee Entity.
 */
public Object mapFromAttributes(Attributes attrs) throws NamingException {
    Employee employee = new Employee();
    employee.setFirstName((String) attrs.get("cn").get());
    return employee;
}
}

根據查詢執行上述代碼時,將僅獲取有關cn屬性的信息,而不會獲取其他信息。 還有其他不需要強類型對象的東西嗎?

我不確定該怎么辦。

例如,要搜索所有員工:

public List getAllEmployees() {
    return ldapTemplate.search("", "(objectclass=person)", new EmployeeContextMapper());
}

這將返回所有雇員,但僅設置cn屬性。 但是,在客戶LDAP服務器上,他們可能沒有名為cn的屬性。

做這個的最好方式是什么? 我們編寫的代碼充當用戶界面和客戶LDAP服務器之間的代理。

最簡單的答案是將屬性的預期用途抽象為屬性類型,該類型是OID或別名。 例如,圖“名”的cn (通用名)屬性的別名,“名”到givenName的屬性,“姓”的sn屬性,等等。 IETF有許多RFC,它們描述了推薦用於LDAP目錄服務器數據庫的屬性。 inetOrgPerson(RFC2798)是一個很好的例子。

如果演示文稿與實現正確分開,則用戶根本不需要知道數據完全來自LDAP目錄服務器,更不用說屬性名是什么了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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