多くの答えがあるかもしれません。考えられる答えの1つは、プリンシパルを使用してベースDNを構築し、スコープbase、フィルターを使用してディレクトリサーバーにクエリを実行し、属性'(&)'を要求することです。isMemberOfたとえば、最新のldapsearchコマンドラインツールと次のプリンシパルを使用する私のテストシステムではuser.0:
ldapsearch --hostname localhost --port 1389 \
--bindDN 'cn=directory manager' --baseDn \
'uid=user.0,ou=people,dc=example,dc=com' \
--searchScope base '(&)' isMemberOf
Password for user 'cn=directory manager':
dn: uid=user.0,ou=people,dc=example,dc=com
isMemberOf: cn=shadow entries,ou=groups,dc=example,dc=com
isMemberOf: cn=persons,ou=groups,dc=example,dc=com
namingContextこの方法では、、この場合dc=example,dc=comは、ユーザーがツリーのどこにいるかについての知識が必要です。ユーザーの場所がわからない場合の別の同様の方法は、最初にユーザーを検索し、次に検索結果から識別された名前を使用して上記のクエリを実行することです。が不明な場合は、ルートDSEからnamingContextを検出できる可能性があります。ルートDSEからnamingContextを回復するには、この記事を参照してください。namingContext
LDAP標準を正しくサポートしておらず、フィルターを拒否する、広く使用されているディレクトリサーバーがいくつかあり'(&)'ます。ディレクトリサーバーがこれらのいずれかである場合は、単にプレゼンスフィルターに置き換えてください'(objectClass=*)'。Java用のLDAPSDKはたくさんありますが、私が好むのはUnboundIDのものです。