【发布时间】:2012-10-30 01:18:58
【问题描述】:
由于我是 spring 和 ldap 的新手,请多多包涵。
如果我想将用户从 ldap 服务器映射到 Person java 对象,来自 ldap 服务器的查询是否包含 objectclass 是否重要?
我的理解是对象类可以是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 的一部分,其中定义了属性“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 对象之间的映射中硬编码?
【问题讨论】:
标签: java spring ldap spring-ldap