我想使用SQL中的“ IN”运算符编写LDAP查询。
例如:如果我有一个名为“ NameList”的名称列表,则编写以下SQL查询
SELECT * FROM TABLENAME WHERE NAME IN "NameList"
如何编写类似的LDAP查询?
public static final String[] LDAP_ATTRIBUTE_IDS = {"displayName"};
LdapContext ldapContext = new InitialLdapContext(env, null); \\env has all
\\connection details
List NameList = new ArrayList<String>();
NameList.add("ABC");
NameList.add("XYZ");
NameList.add("LMN");
NamingEnumeration namingEnumeration = ldapContext.search("",
"(&(objectCategory=person)(objectclass=user)(|(sAMAccountName=XYZ)(sAMAccountName=LMN)(sAMAccountName=ABC)))", getSearchControls());
Attributes attrs = ((SearchResult) namingEnumeration.next()).getAttributes();
String value = attrs.get(LDAP_ATTRIBUTE_IDS);
代替使用“ |”添加XYZ,LMN和ABC我想知道NameList是否可以与“ IN”运算符一起使用。
答案 0 :(得分:1)
否,没有等效的IN
运算符可用于搜索LDAP。
也许您没有使用Active Directory,但是AD确实支持here进行搜索,但是即使如此,它也不支持IN
。
因此,唯一的方法就是已经存在。如果您有NameList
数组,则可以使用SQL Dialect来构建查询。像这样:
NamingEnumeration namingEnumeration = ldapContext.search("",
"(&(objectCategory=person)(objectclass=user)(|(sAMAccountName=" + String.join(")(sAMAccountName=", NameList) + ")))", getSearchControls());