これは私のLDAPサーバーにAD情報を照会しようとする最初の試みです。私のLDAP構文が検索フィルターに間違っています
表示名が "sav"で始まる500個のレコードのcountlimitを持つすべてのアクティブな従業員を検索しようとしています。メールアドレスがあります。 userAccountControl属性が512です。私が遭遇している問題は、私は合計8レコードしか戻っていないということです。私は文字どおり少なくとも10のレコードを取り戻す必要があります。
私の検索では検索されなかった2つのレコードに対して別々の検索を行い、それぞれに電子メールアドレスとuserAccountControlの値が512であったため、2つのレコードが欠落している理由はわかりません。
私は文法に間違ったことをしていますが、それが何であるかはわかりません。どのようなヘルプ/指示をいただければ幸いです。ありがとうございました。あなたがdisplayname
属性とcn
属性混乱するかもしれ
public List<String> getAutocompleteEmpRecordsList(String displayname, LdapContext ctx) {
List<String> activeEmpAttributes = new ArrayList<String>();
Attributes attrs = null;
int count = 0;
int empEmailAddrLen = 0;
try {
SearchControls constraints = new SearchControls();
constraints.setCountLimit(500);
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = {"displayname", "mail", "userAccountControl"};
constraints.setReturningAttributes(attrIDs);
String searchFilter = "(&(objectClass=user)(displayname="+displayname+"*"+")(mail=*)(userAccountControl=512))";
NamingEnumeration answer = ctx.search("OU=Standard,OU=Users,DC=xxx,DC=org", searchFilter, constraints);
if (answer != null) {
while (answer.hasMore()) {
attrs = ((SearchResult) answer.next()).getAttributes();
if (attrs.get("displayname") != null) {
int empNameLen = attrs.get("displayname").toString().length();
activeEmpAttributes.add(attrs.get("displayname").toString().substring(13, empNameLen));
}
count++;
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;
}
search()オーバーロードを調べても別のsearchArgsが必要になりますが、フィルタは '(&(objectClass = user)(displayname = {0} *)(mail = *) userAccountControl = 512)) '' {0}は最初のsearchArgを参照します。 – EJP