Java 如何避免LDAP搜索中的字段名?

Java 如何避免LDAP搜索中的字段名?,java,ldap,Java,Ldap,我正在制作一个LDAP搜索应用程序。它工作正常,但在搜索结果中,它也给了我字段名 例: 如何避免打印字段名 谢谢 public LdapContext getLdapContext() { LdapContext ctx = null; try { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT

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

例:

如何避免打印字段名

谢谢

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);
public LdapContext getLdapContext(){
LdapContext ctx=null;
试一试{
Hashtable env=新的Hashtable();
环境放置(Context.INITIAL\u Context\u工厂,
“com.sun.jndi.ldap.LdapCtxFactory”);
环境保护(Context.SECURITY_认证,“XXX”);
环境put(Context.SECURITY_委托人,“XXXX”);
环境投入(Context.SECURITY_凭证,“XXXX”);
环境投入(Context.PROVIDER_URL,“XXXXX”);
ctx=新的InitialLdapContext(env,null);
System.out.println(“连接成功”);
}捕获(NamingException nex){
System.out.println(“LDAP连接:失败”);
nex.printStackTrace();
}
返回ctx;
}
SearchControls约束=新的SearchControls();
约束.setSearchScope(SearchControls.SUBTREE_范围);
String[]attrIDs={lastName,firstName,location,
电话号码、职务、部门};
约束。设置ReturningAttribute(属性ID);
//第一个输入参数是search base,它可以是
//CN=用户,DC=域,DC=com
//第二个属性可以是uid=username
Namingeumeration answer=ctx.search(“OU=Users,DC=Domain,DC=com”,
“sn=”+姓氏,限制条件);

一些代码显示我正在做什么,,,,请帮助LDAP没有字段,它有
属性描述,其中包含属性值。属性描述是OID的别名,例如,
cn
department

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

也可以考虑使用JNDI而不是JNDI。JNDI不应用于新代码

另见

我只能假设您按照以下思路做了一些事情:

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();
    }
  }
}

您只需使用
get
方法获取不带字段名的对象

例如:

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

谢谢

我正在使用JAVA、、Windows xp、、在Liferay Portal、、Eclipse IDE、、Tomcat服务器上工作。除了连接失败之外,这里没有任何代码可以打印任何内容。如果你不透露代码的样子,帮助你是困难的,如果不是不可能的话。
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);
System.err.println(attribs.get("cn")**.get()**);