如何避免LDAP SEARCH中的字段名称?

时间:2012-08-17 08:49:55

标签: java ldap

我正在制作一个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);

一些代码显示我正在做什么,,,请帮助

3 个答案:

答案 0 :(得分:0)

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

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

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

另见

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

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

例如:

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

谢谢