0

我正在制作一个 LDAP 搜索应用程序。它工作正常,但在搜索结果中,它也给了我字段名称

前任:

**sn:** YYYY
**department:** xxxx
....etc

如何避免打印字段名称?

谢谢

public LdapContext getLdapContext() {

LdapContext ctx = null;
try {
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.SECURITY_AUTHENTICATION, "XXX");
        env.put(Context.SECURITY_PRINCIPAL, "XXXX");
        env.put(Context.SECURITY_CREDENTIALS, "XXXX");
        env.put(Context.PROVIDER_URL, "XXXXX");
        ctx = new InitialLdapContext(env, null);
        System.out.println("Connection Successful.");
    } catch (NamingException nex) {
        System.out.println("LDAP Connection: FAILED");
        nex.printStackTrace();
    }
    return ctx;
}


SearchControls constraints = new SearchControls();

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = { lastName, firstName, location,
                     telephoneNumber, jobTitle, division };
constraints.setReturningAttributes(attrIDs);

// First input parameter is search base, it can be
// "CN=Users,DC=Domain,DC=com"
// Second Attribute can be uid=username
NamingEnumeration<SearchResult> answer = ctx.search("OU= Users,DC=Domain,DC=com",
                "sn=" + lastname, constraints);

一些代码来显示我在做什么,,,请帮忙

4

3 回答 3

0

我只能假设您按照以下方式做某事:

static void printAttrs(Attributes attrs) {
   if (attrs == null) {
     System.out.println("No attributes");
   } else {
    /* Print each attribute */
    try {
     for (NamingEnumeration<?> ae = attrs.getAll(); ae.hasMore();) {
      Attribute attr = (Attribute) ae.next();
      System.out.println("attribute: " + attr.getID());

      // print each value
      for (NamingEnumeration<?> e = attr.getAll(); e.hasMore(); System.out.println("value: " + e.next()));
     }

    } catch (NamingException e) {
    e.printStackTrace();
    }
  }
}


如果您想获取其中的一部分,可以使用以下内容解析内容:

** 注意:此代码取自某处,我丢失了链接...

/*
 * Prepares and returns CN that can be used for AD query
 * e.g. Converts "CN=**Dev - Test Group" to "**Dev - Test Group"
 * Converts CN=**Dev - Test Group,OU=Distribution Lists,DC=DOMAIN,DC=com to "**Dev - Test Group"
 */
public static String getCN(String cnName) {
    if (cnName != null && cnName.toUpperCase().startsWith("CN=")) {
        cnName = cnName.substring(3);
    }
    int position = cnName.indexOf(',');
    if (position == -1) {
        return cnName;
    } else {
        return cnName.substring(0, position);
    }
}
于 2012-08-17T13:51:46.127 回答
0

LDAP 没有字段,它具有attribute descriptions属性值。属性描述是 OID 的别名,例如cndepartment

在显示属性的代码中,调用仅返回属性值的方法。

此外,请考虑使用UnboundID LDAP SDK而不是 JNDI。JNDI 不应该用于新代码。

也可以看看

于 2012-08-17T13:30:46.163 回答
0

您可以只使用该get方法获取没有字段名称的对象。

例如:

System.err.println(attribs.get("cn")**.get()**);

谢谢

于 2021-05-04T13:15:18.213 回答