我感到有些紧张,因为这是我在Stack Overflow的第一个问题。如果我没有以良好的方式做到这一点,请告诉我。
在LDAP中,我认为以下搜索过滤字符串可以正常工作。
( & (uid=tt4cs) (objectClass=inetOrgPerson) )
这意味着搜索条目,其中一个uid
为tt4cs
,其中一个objectClass
为inetOrgPerson
。
请注意,每个括号和&符之间都有空格,只会被忽略。但是,就我读到RFC4515而言,我找不到任何允许任何空间的含义。任何人都可以告诉我其他标准是否允许这样做,或者按照惯例这样做是什么?
更新于2014年1月13日
我已经用三种方式对它进行了测试。 (我的环境中的LDAP服务器是OpenLDAP 2.4.38)
(1)在命令行上执行ldapsearch
。上面的搜索过滤器可以运行并获得结果。
(2)使用UnboundID LDAP SDK for Java进行搜索。此API不会将搜索请求发送到服务器,但会抛出一个异常,指出“在过滤器字符串的第15位发现了意外的右括号。”
String filter = "( & (uid=tt4cs) (objectClass=inetOrgPerson) )";
SearchResult searchResult
= connection.search("dc=localdomain", SearchScope.SUB, filter);
(3)使用Apache Directory LDAP API进行搜索。此API不会将搜索请求发送到服务器,但会抛出一个异常,指出“过滤器(&(uid = tt4cs)(objectClass = inetOrgPerson))无效。”
String filter = "( & (uid=tt4cs) (objectClass=inetOrgPerson) )";
EntryCursor cursor
= connection.search("dc=localdomain", filter, SearchScope.SUBTREE);
现在我觉得接受额外的空格可能是依赖于实现的行为,并且最好避免它。