結果を返さないLDAP

私はActive Directoryの簡単な検索を行うJavaコードを持っています。本番ADを使用しているときにコードが期待どおりに機能しますが、テスト用ADで同じコードを使用すると結果は返されません(例外もエラーもスローされません)。

私のマシンでADブラウザを使用しているとき、私はテストADをブラウズして検索し、探している結果を見つけることができます。

ADはすべての人に読み取りアクセスを許可するため、アクセス権の問題ではありません。

誰もが私のJavaクライアントに結果を返さない原因になる可能性があることを知っていますが、私のブラウザにはありますか?

Javaコード:

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, Constants.LDAPURL);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.REFERRAL, "follow");
        DirContext dctx = new InitialDirContext(env);

        String base = Constants.LDAPQUERYLOCATION;

        SearchControls sc = new SearchControls();
        String[] attributeFilter = {"cn", "sAMAccountName", "sn", "distinguishedName"};
        sc.setReturningAttributes(attributeFilter);
        sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String filter = "(&(objectClass=User)(sn=smith))";
        NamingEnumeration results = dctx.search(base, filter, sc);
        if(!results.hasMore()){
            log.debug("No results found");
        }
        while (results.hasMore()) {
            SearchResult sr = (SearchResult) results.next();
            Attributes attrs = sr.getAttributes();
            Attribute attr = attrs.get("cn");
            log.debug("cn: "+attr.get());
            attr = attrs.get("sn");
            log.debug("sn: "+attr.get());
            attr = attrs.get("distinguishedName");
            log.debug("dn: "+attr.get());
        }
        dctx.close();

私は広告のコントロールを持っていないので、実際にセットアップに関する多くの情報を提供することはできません。

0
テストとプロダクションでConstants.LDAPURLとConstants.LDAPQUERYLOCATIONのclauesを提供できますか?
追加された 著者 JPBlanc,

1 答え

OpenLDAPを使用している私のネットワーク上であなたのコードを試してみました - 私が知っているのはADと同じではありませんしかし

filter の文字列をこれに変更するまで、結果は得られません。

String filter = "(&(objectClass=inetOrgPerson)(sn=smith))";

LDAPブラウザを使ってディレクトリにスヌーピングすることで、その inetOrgPerson オブジェクトクラスを取得しました。それは長いですが、あなたのテストADが本番サーバーと同じオブジェクトクラスを使用していない可能性はありますか?

A quick Google shows me that Microsoft's implementation of the LDAP standard was lacking at first, but should now be (more) compliant with the use of inetOrgPerson - maybe your test AD is running an older version with the problems, while your prod box is on the latest-and-greatest? Or perhaps vice-versa?

0
追加された
私は思ったが、どちらも同じObjectClass
追加された 著者 AverageMarcus,
私が知っている限り、はい。
追加された 著者 AverageMarcus,
同じバージョンのOSで同じバージョンのADを実行していますか?
追加された 著者 millhouse,