1
我需要通過使用LDAP服務器查詢活動目錄來獲取活動目錄中定義的ACTIVE用戶列表。在LDAP服務器中查詢「ACTIVE」用戶不起作用
我試圖通過成功連接到我的ldap服務器來做到這一點。在下面的java代碼中,當使用accountExpires屬性時,我只返回1條記錄。我應該找回記錄列表,每條記錄都顯示來自ldap服務器的DISPLAY NAME和MAIL屬性。
這裏是我的代碼:
public static void main(String[] args) {
ADUserAttributes adUserAttributes = new ADUserAttributes();
adUserAttributes.getLdapContext());
adUserAttributes.getActiveEmpRecordsList("0", adUserAttributes.getLdapContext());
}
public LdapContext getLdapContext(){
LdapContext ctx = null;
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
env.put(Context.SECURITY_PRINCIPAL, "e~inventory");
env.put(Context.SECURITY_CREDENTIALS, "password");
env.put(Context.PROVIDER_URL, "ldap://xxxdc01.txh.org");
ctx = new InitialLdapContext(env, null);
System.out.println("Connection Successful.");
} catch(NamingException nex){
System.out.println("LDAP Connection: FAILED");
nex.printStackTrace();
}
return ctx;
}
private List<String> getActiveEmpRecordsList(String accountExpires, LdapContext ctx) {
List<String> activeEmpAttributes = new ArrayList<String>();
Attributes attrs = null;
try {
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = {"displayname", "mail"};
constraints.setReturningAttributes(attrIDs);
NamingEnumeration answer = ctx.search("DC=txh,DC=org", "accountExpires=" + accountExpires, constraints);
if (answer.hasMore()) {
attrs = ((SearchResult) answer.next()).getAttributes();
int empNameLen = attrs.get("displayname").toString().length();
int empEmailAddrLen = attrs.get("mail").toString().length();
activeEmpAttributes.add(attrs.get("displayname").toString().substring(13, empNameLen));
activeEmpAttributes.add(attrs.get("mail").toString().substring(6, empEmailAddrLen));
ctx.close();
}else{
throw new Exception("Invalid User");
}
System.out.println("activeEmpAttributes: " + activeEmpAttributes);
System.out.println("count: " + activeEmpAttributes.size());
} catch (Exception ex) {
ex.printStackTrace();
}
return activeEmpAttributes;
}
Marc - 感謝您的額外信息。我終於能夠使我原來的查詢工作。感謝您閱讀MSDN文章的鏈接。偉大的信息。欣賞你的時間。 – Melinda
@Melinda:請接受**接受**提供的最佳答案,解決您的問題。在StackOverflow上做這件事是正確和有禮貌的,並且可以激勵其他人繼續幫助那些尋求答案的人。 [查看常見問題](http://meta.stackexchange.com/questions/5234/accepting-answers-what-is-it-all-about) –