LDAP目录搜索

  categories:java资料  author:

LDAP搜索是目录服务最常用的功能之一。在LDAP服务中搜索要用到相应的Filter语句。Filter语句由3个部分组成:

1. 属性,如:cn ,uid ,操作属性如:objectClass , nsroledn

2. 比较操作符 ,如 < , > ,= ,…

3. 逻辑预算符,如: 与操作& , 或操作| , 非操作!

基本 LDAP 语法

• =(等于)

此 LDAP 参数表明某个属性等于某个值的条件得到满足。例如,如果希望查找属性为“John”的所有对象,可以使用:

(givenName=John)

这会返回属性为“John”的所有对象。圆括号是必需的,以便强调 LDAP 语句的开始和结束。

• &(逻辑与)

如果具有多个条件并且希望全部条件都得到满足,则可使用此语法。例如,如果希望查找居住在 Dallas 并且“John”的所有人员,可以使用:

(&(givenName=John)(l=Dallas))

请注意,每个参数都被属于其自己的圆括号括起来。整个 LDAP 语句必须包括在一对主圆括号中。操作符 表明,只有每个参数都为真,才会将此筛选条件应用到要查询的对象。

• !(逻辑非)

此操作符用来排除具有特定属性的对象。假定您需要查找“John”的对象以外的所有对象。则应使用如下语句:

(!givenName=John)

此语句将查找不为“John”的所有对象。请注意:操作符紧邻参数的前面,并且位于参数的圆括号内。由于本语句只有一个参数,因此使用圆括号将其括起以示说明。

• *(通配符)

可使用通配符表示值可以等于任何值。使用它的情况可能是:您希望查找具有职务头衔的所有对象。为此,可以使用:

(title=*)

这会返回“title”属性包含内容的所有对象。另一个例子是:您知道某个对象的属性的开头两个字母是“Jo”。那么,可以使用如下语法进行查找:

(givenName=Jo*)

这会返回“Jo”开头的所有对象。

• 以下是 LDAP 语法的高级使用示例:

• 您需要一个筛选条件,用来查找居住在 Dallas 或 Austin,并且名为“John”的所有对象。使用的语法应当是:

(&(givenName=John)(|(l=Dallas)(l=Austin)))

• 您发现应用程序日志中有 9,548 个事件,因此需要查找导致这些日志事件的所有对象。在此情况下,您需要查找所有被禁用的用户 (msExchUserAccountControl=2),这些用户的 msExchMasterAccountSID 没有值。使用的语法应当是:

(&(msExchUserAccountControl=2)(!msExchMasterAccountSID=*))

  注意:

操作符与通配符的结合使用可查找属性未设置为任何值的对象。

关于Filter语句组成的详细参数表如下:

filter的运算符

filter布尔运算符

搜索过滤器示例 

· 下列过滤器将搜索包含一个或多个 manager 属性值的条目。这也称为存在搜索:manager=* 

· 下列过滤器将搜索包含通用名 Ray Kultgen 的条目。这也称为等价搜索:cn=Ray Kultgen 

· 下列过滤器返回所有不包含通用名 Ray Kultgen 的条目:(!(cn=Ray Kultgen)) 

· 下列过滤器返回的所有条目中都有包含子字符串 X.500 的说明属性:description=*X.500* 

· 下列过滤器返回所有组织单元为 Marketing 且说明字段中不包含子字符串 X.500 的条目:(&(ou=Marketing)(!(description=*X.500*))) 

· 下列过滤器返回所有组织单元为 Marketing 且 manager 为 Julie Fulmer 或 Cindy Zwaska 的条目:(&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,dc=siroe,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,dc=siroe,dc=com))) 

· 下列过滤器返回所有不代表人员的条目:(!(objectClass=person)) 

· 下列过滤器返回所有不代表人员且通用名近似于 printer3b 的条目:(&(!(objectClass=person))(cn~=printer3b)) 



快乐成长 每天进步一点点