从LDAP groupOfUniqueNames中提取多值属性

时间:2011-05-31 22:53:58

标签: java ldap

我正在尝试将属于LDAP中定义的组的所有成员读为groupOfUniqueNames。

String url = "ldap://blah.blah.address:389/dc=foo,dc=bar";
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);

DirContext ctx = new InitialDirContext(env);
String[] attrIDs = {"uniqueMember"};
SearchControls cons = new SearchControls();

Attributes answer = ctx.getAttributes("cn=testgroup", attrIDs);

NamingEnumeration e = answer.getAll();
while (e.hasMore()) {
    BasicAttribute attr = (BasicAttribute) e.next();
    System.out.println(attr.getID() + ": " + attr.get());
}

但是,此代码打印

uniqueMember:

好像它没有读取唯一成员的所有值。

使用Apache Directory Studio我可以看到此属性有3个值(其中一个为空)。我怎样才能访问所有这些?

如果这很重要,我正在使用OpenLDAP。

1 个答案:

答案 0 :(得分:4)

我设法使用JLDAP解决了这个问题

LDAPConnection conn = new LDAPConnection();
conn.connect("blah.blah.address", 389);

String[] attrIDs = {"uniqueMember"};
LDAPSearchResults search = conn.search("dc=foo,dc=bar",
                                       LDAPConnection.SCOPE_ONE,
                                       "cn=testgroup", attrIDs, false);

while(search.hasMore()) {
    LDAPEntry entry = search.next();
    for (String string : entry.getAttribute("uniqueMember").getStringValueArray()) {
        System.out.println(string);
    }
}