Java如何使用DN从ldap获取属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何使用DN从ldap获取属性?相关的知识,希望对你有一定的参考价值。

我有一个用于搜索组的Java应用程序。它基于组名(cn)的搜索工作得很好,但有时我会得到多个结果,因为在其他分支中使用了相同的cn。我有该组的DN,我想知道如何根据DN进行搜索,或者是否可以直接访问该属性,因为我有完整的路径。这是我使用的代码:

public Group getGroup( String groupName) throws Exception {

        List<User> memberList = new ArrayList<User>();

        // Create the search controls
        SearchControls searchCtls = new SearchControls();

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

        // Specify the attributes to return
        String returnedAtts[] = { MEMBER_FIELD };

        searchCtls.setReturningAttributes( returnedAtts );

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

        // Search for objects using the filter
        NamingEnumeration<SearchResult> answer = ctxMap.get( configMap.get( GROUP ) ).search( configMap.get( SEARCHBASE ), searchFilter,
                searchCtls );

        SearchResult sr = null;


        // Loop through the search results
        while ( answer.hasMoreElements() ) {
            sr = (SearchResult) answer.next();
        }
        if ( sr == null  ) {
            return group;
        }

        // Create an attribute for memberOf
        javax.naming.directory.Attribute member = sr.getAttributes().get( MEMBER_FIELD );

        // Enumeration of all elements in memberOf
        NamingEnumeration<?> ne = member.getAll();


        // Loop though the enumeration, cut unwanted characters and add all
        // elements to User List
        while ( ne.hasMoreElements() ) {
            ...
        }

    }

所以我想将组的专有名称作为参数传递给函数而不是组的名称,并对其进行搜索或直接获取属性。这可能吗?

PS:此代码用于获取某个组的成员。

谢谢

答案

如果您有DN,则无需搜索。用lookup()查一下吧。

另一答案

在EJP的帮助下,我发现了一种在不进行搜索的情况下从DistinguishedName获取属性的方法:

Attributes attrs;
attrs = ctx.getAttributes( dn );

Attribute attr= attrs.get( "the attribute you need" );

以上是关于Java如何使用DN从ldap获取属性?的主要内容,如果未能解决你的问题,请参考以下文章

用户如何在ldap服务器中创建用户后登录?

ldap怎么增加用户的属性,比如url,

LDAP:错误代码 1 - 目录服务器找不到绑定 dn“”的网络组

如何使用 JOSSO 和 Spring Security 从 Grails 应用程序中的 LDAP 获取自定义属性?

如何从组的 LDAP 搜索中获取用户给定名称属性的列表?

搭建openldap与phpldapadmin