Я разрабатываю Java, используя Spring для своей компании. Мы разрабатываем приложение, в котором у нас есть локальный сервер 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 клиента.