我正在制作一个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);
一些代码显示我正在做什么,,,请帮助
答案 0 :(得分:0)
LDAP没有字段,其attribute descriptions
具有属性值。属性描述是OID的别名,例如cn
和department
。
在显示属性的代码中,调用仅返回属性值的方法。
另外,请考虑使用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()**);
谢谢