目标是在给定用户ID列表的情况下,使用Java中的LDAP从AD(活动目录)中提取不同的属性。为此,我有
public Map<String, List<String>> UserDetails(List<String> userSAMs){
DirContext ldapContext = null;
Map<String, List<String>> detailsMap = null;
ldapContext = new LdapProp().getLdapContext();
String returnedAtts[] = {"cn", "givenName", "memberOf"};
String searchFilter = "(&(objectClass=user)(|"; // long OR statement
for (String sam : listSamids){ // building the LDAP query
// HIC SUNT LEONES
searchFilter = "(" + sam + ")";
}
searchFilter = searchFilter + "))";
NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls);
while (answer.hasMoreElements()) { // Loop over results
SearchResult sr = (SearchResult) answer.next();
Attributes attrs = sr.getAttributes();
String samStr= attrs.get("sAMAccountName").toString();
samStr.replace("sAMAccountName: ", "");
List<String> propOfSam = new ArrayList();
for (String ldapParam : returnedAtts){
String paramStr = attrs.get(ldapParam).toString();
paramStr.replace(ldapParam + ": ", ""); // extract value
propertiesOfSam.add(paramStr);
}
detailsMap.put(samStrng,propertiesOfSam);
};
return detailsMap;
}
为简单起见,我删除了代码中的所有错误处理。类LdapProp
封装了所有LDAP连接详细信息,例如AD服务器的PROVIDER_URL
,SECURITY_PRINCIPAL
,SECURITY_CREDENTIALS
和SEARCH_BASE
。
我的问题:如何保证输入列表的完整性?该位置在代码中以HIC SUNT LEONES
标记。
答案 0 :(得分:0)
到目前为止,我尝试过的一件事是使用正则表达式从输入列表的每个字符串sam
中删除所有禁用的字符。非平凡的部分是如何正确地逃脱它们。我提出了以下解决方法:我用
\\ HIC SUNT LEONES
sam = sam.replaceAll("[\\\\<>=\\*+-;:\\|@\"\\[\\]\\?]" ,""));
此处,正方括号中的外方括号为字符类,即[abc]
表示“a,b或c中的任何字符”。棘手的部分是例如\\\\
只代表反斜杠。