我需要在身份验证后从 LDAP 中检索各种值,例如 Description、Office 等。
我已经能够完成身份验证,但我无法检索其他值。
我应该使用什么名称来检索完整的数据?
请帮忙。
我的代码如下:
public boolean authenticate(String userid, String pass, String domain) {
boolean retval = false;
String searchFilter ="(&(objectClass=user)(" + LDAP_UID_ATTR + "=" + userid + "))";
try {
System.out.println("Start: getLDAPAttrs");
NamingEnumeration answer =
getLDAPAttrs(userid, pass, searchFilter, domain);
String uid = "";
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();
Attributes attrs = sr.getAttributes();
try {
uid = attrs.get(LDAP_UID_ATTR).toString();
System.out.println("uid: " + uid);
System.out.println(attrs.get("mail"));
uid = uid.substring(uid.indexOf(':') + 2);
} catch (Exception err) {
// uid = "";
System.out.println(err.getMessage());
err.printStackTrace();
}
// verify userid
if (userid.equalsIgnoreCase(uid)) {
retval = true;
break;
}
}
} catch (NamingException ne) {
System.out.println("In authenticateWithLDAP, LDAP Authentication NamingException : " +
ne.getMessage());
} catch (Exception ex) {
System.out.println("In authenticateWithLDAP, LDAP Authentication Exception : " +
ex.getMessage());
}
return retval;
// return retval;
}
private NamingEnumeration getLDAPAttrs(String userid, String pass,
String searchFilter,
String domain) throws NamingException,
Exception {
String host = getServerName();
String port = getIP_Port();
String dcPart1 = getDcPart1();
String dcPart2 = getDcPart2();
// String attrUserID = getLDAP_UID_ATTR();
// String attrUserName = getLDAP_UNAME_ATTR();
// set attribute names to obtain value of
String[] returnedAtts = { "sAMAccountName", "cn","mail" };
SearchControls searchCtls = new SearchControls();
searchCtls.setReturningAttributes(returnedAtts);
// specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// set search base
String searchBase = "DC=" + dcPart1 + ",DC=" + dcPart2;
// set ldap env values
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, "ldap://" + host + ":" + port);
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
environment.put(Context.SECURITY_PRINCIPAL, userid + "@" + domain);
environment.put(Context.SECURITY_CREDENTIALS, pass);
// set ldap context
DirContext ctxGC = new InitialDirContext(environment);
// perform search to obtain values
NamingEnumeration answer =
ctxGC.search(searchBase, searchFilter, searchCtls);
return answer;
}