1

次の 2 つの LDAP JNDI クエリがあります。

1>特定のグループに属するすべてのユーザーのリストを取得します

以下はこれのための私のコードです

String group = StringUtils.isBlank(groupName) ? "*" : groupName
                    .endsWith("*") ? groupName : groupName + "*";
            // Create the search controls
            SearchControls searchCtls = new SearchControls();

            // Specify the search scope
            searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

            // specify the LDAP search filter
            String searchFilter = "(&(objectClass=*)(CN=" + group + "))";

            // Specify the Base for the search
            // String searchBase =
            // "ou=internal,ou=groups,ou=people,dc=somecomp,dc=com";
            String searchBase = "";

            // initialize counter to total the group members
            int totalResults = 0;

            // Specify the attributes to return
            String returnedAtts[] = { "member" };
            searchCtls.setReturningAttributes(returnedAtts);

            // Search for objects using the filter
            NamingEnumeration<?> answer = ctx.search(searchBase, searchFilter,
                    searchCtls);

2> 2番目は、ユーザーIDを指定してユーザーのすべての属性を取得します

これは 2 番目のクエリのコードです

String attrName = "uid="
                    + userId
                    + ","
                    + (isInternal ? "ou=internal,"
                            : isExternal ? "ou=external,"
                                    : LDAPServicesConstants.EMPTY_STRING)
                    + "ou=people,dc=somecomp,dc=com";
            Attributes attrs = ctx.getAttributes(attrName);
            if (attrs != null) {
                for (NamingEnumeration<?> ae = attrs.getAll(); ae.hasMore();) {
                    Attribute attr = (Attribute) ae.next();
                    String uidAttribute = attr.getID();
                    if (!LDAPHelperUtilities.isSystemAttribute(ctx,
                            uidAttribute)) {
                        ArrayList<String> attrValues = new ArrayList<String>();
                        for (NamingEnumeration<?> attrEnum = attr.getAll(); attrEnum
                                .hasMore(); attrValues.add(String
                                .valueOf(attrEnum.next()))) {
                        }
                        userAttrs.put(uidAttribute.toLowerCase(),
                                (String[]) attrValues
                                        .toArray(new String[0]));
                        log.debug("value(s) : "
                                + Arrays.asList((String[]) userAttrs
                                        .get(uidAttribute.toLowerCase())));
                    }
                }

最初から各 uid に対して 2 番目のクエリを呼び出すことはオプションではないため、これら 2 つのクエリを 1 つに結合する必要があります (何千ものユーザーが返される可能性があります)。

これら2つを組み合わせて、各ユーザーの属性のコレクションのコレクションを返す方法はありますか?

ありがとうございました

4

2 に答える 2

1

それが Active Directory の場合、 use と言うでしょう(&(objectClass=user)(memberOf=groupDN))

LDAP サーバーのユーザー オブジェクトに同様のフィールドがあるかどうかを確認します。つまり、ユーザーがメンバーであるグループを指すフィールドです。次に、このフィールドを使用してフィルターを作成します。したがって、クエリは 2 つだけになります。1 つはグループ DN 用で、もう 1 つはすべてのユーザー用です。

于 2013-06-11T09:37:34.453 に答える