Почему нам не нужно указывать объектный класс для пользователя ldap при использовании ContextMapper?

Пожалуйста, потерпите меня, так как я новичок в 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?


person user1812844    schedule 09.11.2012    source источник


Ответы (1)


Коду Java не нужно знать класс объектов LDAP. Он просто получает атрибуты. Либо объект LDAP имеет эти атрибуты, и в этом случае вы их получаете, либо нет, и в этом случае вы получаете исключение.

person user207421    schedule 09.11.2012