1

LDAP オブジェクトをルックアップするオブジェクト ファクトリを実装しましたが、提供されたコンテキストが (nameCtx.getNameInNamespace() を介して) LDAP から DN を返しません。私は何らかの方法でそれを間違っていますか?

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() は空の文字列のみを返します。

4

3 に答える 3

1
String dn = (String) attrs.get("dn").get();

これはのみをスローしNamingExceptionます。
識別名(DN)はLDAPオブジェクトの属性ではないと思います。これは、LDAPの世界ではIDキーのようなものです。

于 2008-11-27T11:00:08.440 に答える
0

コンテキストが「ルートノード」またはそれが呼ばれるものを指している可能性があります。つまり、最上位の名前空間を子として持つノードです。

getNameInNamespace を呼び出すときにコンテキストがバインドされていない可能性もありますが、例外がスローされると予想されます。

私はこの種のものに spring-ldap を使用していますが、その DirContextAdapter および LdapTemplate クラスで同様のバグを経験したことはありません。しかし、繰り返しになりますが、私は常にそれらを特定の名前空間にバインドしています。

于 2009-06-14T15:54:44.230 に答える
0

多分?

String dn = (String) attrs.get("dn").get();

それは他のような属性であるべきですか?

于 2008-11-27T08:06:55.560 に答える