Java 从LDAP groupOfUniqueNames中提取多值属性

Java 从LDAP groupOfUniqueNames中提取多值属性,java,ldap,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.LdapCtxFactor

我试图读取属于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());
}
好像它没有读取唯一成员的所有值

使用Apache Directory Studio,我可以看到该属性有3个值(其中一个为空)。我如何访问所有这些文件


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

我使用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);
    }
} 

我使用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);
    }
} 

看起来LDAP只返回了空值。我看不出你的代码有什么问题,除非有异常被吞没。对该成员有任何访问控制吗?您使用的匿名连接具有slapd.conf中为其定义的最低权限。不,这绝对不是授权问题。我使用JLDAP解决了这个问题。您好,我在尝试获取组的所有成员时遇到了相同的问题(成员是组条目中的多值字段)。它将只返回第一个成员。这是OpenLDAP中的错误吗?JavaJNDI?如果可能的话,我希望坚持使用JNDI并避免使用JLDAP。感谢您提供的解决方案/想法。看起来LDAP只返回了空值。我看不出你的代码有什么问题,除非有异常被吞没。对该成员有任何访问控制吗?您使用的匿名连接具有slapd.conf中为其定义的最低权限。不,这绝对不是授权问题。我使用JLDAP解决了这个问题。您好,我在尝试获取组的所有成员时遇到了相同的问题(成员是组条目中的多值字段)。它将只返回第一个成员。这是OpenLDAP中的错误吗?JavaJNDI?如果可能的话,我希望坚持使用JNDI并避免使用JLDAP。感谢您提供的解决方案/想法。