我已经实现了一个对象工厂来查找LDAP对象,但是提供的上下文不会从LDAP返回DN(通过nameCtx.getNameInNamespace())。我在某种程度上做错了吗?
public class LdapPersonFactory implements DirObjectFactory {
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx,
Hashtable<?, ?> environment, Attributes attrs) throws Exception {
if (attrs == null)
return null;
Attribute oc = attrs.get("objectclass");
if (oc != null && oc.contains("inetOrgPerson")) {
String surname = (String) attrs.get("sn").get();
String givenName = (String) attrs.get("givenname").get();
String dn = nameCtx.getNameInNamespace();
return new LdapPerson(dn, givenName, surname);
}
return null;
}
}
nameCtx.getNameInNamespace()只返回一个空字符串。
答案 0 :(得分:1)
String dn = (String) attrs.get("dn").get();
这只会引发NamingException
我不认为专有名称(DN)是LDAP对象的属性,它更像是LDAP世界中的身份密钥。
答案 1 :(得分:0)
也许?
String dn = (String) attrs.get("dn").get();
它应该是一个与其他属性一样的属性吗?
答案 2 :(得分:0)
可能是您的上下文指向“根节点”或它所调用的内容。也就是说,具有顶级名称空间的节点作为其子节点。
我想也可能是你在调用getNameInNamespace时没有绑定上下文,尽管我希望抛出异常。
我将spring-ldap用于此类内容,并且没有遇到与其DirContextAdapter和LdapTemplate类相似的错误。但话说回来,我总是将它们绑定到特定的命名空间。