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

时间:2019-07-23 09:55:21

标签: sql ldap spring-ldap 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”运算符一起使用。

1 个答案:

答案 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());