如何使用 SQL 中的 "IN" 运算符编写 LDAP 查询

How to use "IN" operator from SQL for writing LDAP query

我想使用 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" 运算符一起使用。

不,没有用于搜索 LDAP 的等效 IN 运算符。

也许您没有使用 Active Directory,但 AD 确实支持 SQL Dialect 搜索,但即便如此,它也不支持 IN

所以唯一的方法就是你已经是这样了。如果您有 NameList 数组,则可以使用 String.join 来构建查询。像这样:

NamingEnumeration namingEnumeration = ldapContext.search("",
"(&(objectCategory=person)(objectclass=user)(|(sAMAccountName=" + String.join(")(sAMAccountName=", NameList) + ")))", getSearchControls());