1

请耐心等待,因为我是 spring 和 ldap 的新手。

如果我想将用户从 ldap 服务器映射到 Person java 对象,来自 ldap 服务器的查询是否包含对象类是否重要?

我的理解是对象类可以是ldap已经预定义的东西,比如“person”、“organizationalPerson”、“inetOrgPerson”等。ldap也可以保存自定义的objectclasses。如果定义了 objectclass=person,则保证将定义“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;
      }
   }

在这里,它没有引用 objectclass=person,但它会查找属性,就好像 objectclass=person 确实已经设置了一样。如果此 ldap 目录中的用户也是 objectclass=CustomPerson 的一部分,其中定义了属性“goals”、“salary”,该怎么办?

然后,在不知道这个用户是否也是 objectclass=CustomPerson 的情况下,是否像添加这样的检查一样简单:

if (context.getStringAttribute("goals") != null) 
     p.setGoals(context.getStringAttribute("goals"));

或者,如果此用户只是 objectclass=CustomPerson 的一部分,而不是 objectclass=person 的一部分,该怎么办。那么,寻找“cn”和“sn”就没有意义了,因为只定义了“goals”和“salary”?

我是否遗漏了什么,或者只是假设用户属性已经提前知道,所以我们可以在 ldap 用户和 java Person 对象之间的映射中硬编码?

4

1 回答 1

0

Java 代码不需要知道 LDAP 对象类。它只是获取属性。LDAP 对象具有这些属性,在这种情况下您会获得它们,或者它没有,在这种情况下您会遇到异常。

于 2012-11-09T22:53:20.997 回答