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