Пожалуйста, потерпите меня, так как я новичок в spring и ldap.
Если я хочу сопоставить пользователей с сервера ldap с java-объектом Person, имеет ли значение, содержит ли запрос с сервера ldap объектный класс или нет?
Насколько я понимаю, класс объекта может быть чем-то, что предопределено ldap, например, «человек», «organizationalPerson», «inetOrgPerson» и т. д. Ldap также может содержать определенные пользователем объектные классы. Если определен объектный класс=человек, то гарантируется, что будут определены "cn", "sn" и т.д.
Приведенный ниже измененный пример кода должен сопоставлять атрибуты ldap с объектом Java Person:
private static class PersonContextMapper
implements ContextMapper {
public Object mapFromContext(Object ctx) {
DirContextAdapter context = (DirContextAdapter)ctx;
Person p = new Person();
if (context.getStringAttribute("cn") != null)
p.setFullName(context.getStringAttribute("cn"));
if (context.getStringAtribute("sn") != null)
p.setLastName(context.getStringAttribute("sn"));
return p;
}
}
Здесь он не ссылается на объектный класс=человек, но ищет атрибуты, как если бы объектный класс=человек был определенно установлен. Что, если пользователи в этом каталоге ldap также являются частью objectclass=CustomPerson, где определены атрибуты «цели», «зарплата»?
Затем, не зная, является ли этот пользователь также objectclass=CustomPerson, было бы так же просто, как добавить проверку следующим образом:
if (context.getStringAttribute("goals") != null)
p.setGoals(context.getStringAttribute("goals"));
Или, что, если этот пользователь является ТОЛЬКО частью objectclass=CustomPerson, а НЕ objectclass=person. Тогда поиск «сп» и «зн» не имеет смысла, потому что определены только «цели» и «зарплата»?
Я что-то упустил, или просто предполагается, что атрибуты пользователя уже известны заранее, и поэтому мы можем жестко кодировать сопоставления между пользователем ldap и объектом java Person?