为什么在使用ContextMapper时我们不必为ldap用户指定objectclass?

时间:2012-11-09 17:19:38

标签: java spring ldap spring-ldap

请耐心等待我,因为我刚接触到春天和ldap。

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

我的理解是对象类可以是ldap预定义的东西,例如“person”,“organizationalPerson”,“inetOrgPerson”等.Ldap也可以包含自定义的对象类。如果定义了objectclass = person,则保证定义“cn”,“sn”,等等。

以下修改后的sample code应该将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的一部分,其中定义了“目标”,“薪水”属性,该怎么办?

然后,在不知道该用户是否也是objectclass = CustomPerson的情况下,它会像添加支票一样简单:

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

或者,如果此用户只是objectclass = CustomPerson和NOT objectclass = person的一部分,该怎么办?那么,寻找“cn”和“sn”是没有意义的,因为只定义了“目标”和“薪水”?

我是否遗漏了某些内容,或者只是假设用户属性已经提前知道,因此我们可以硬编码ldap用户和java Person对象之间的映射?

1 个答案:

答案 0 :(得分:0)

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