LDAP Compare
LDAP“比较”操作允许 Client 端询问服务器命名条目是否具有属性/值对。这允许服务器将某些属性/值对保持 Secret(即,对于一般的“搜索”访问不公开),同时仍然允许 Client 端对其进行有限的使用。例如,某些服务器可能使用此功能来 Importing 密码,尽管 Client 端在“比较”操作本身中传递明文密码是不安全的。
要在 JNDI 中完成此操作,请对以下方法使用适当约束的参数:
-
过滤器的形式必须为“((* name * = * value *)”。您不能使用通配符。
-
搜索范围必须为SearchControls.OBJECT_SCOPE。
-
您必须请求不返回任何属性。如果不满足这些条件,则这些方法将使用 LDAP“搜索”操作而不是 LDAP“比较”操作。
这里的an example导致使用 LDAP“比较”操作。
// Value of the attribute
byte[] key = {(byte)0x61, (byte)0x62, (byte)0x63, (byte)0x64,
(byte)0x65, (byte)0x66, (byte)0x67};
// Set up the search controls
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(new String[0]); // Return no attrs
ctls.setSearchScope(SearchControls.OBJECT_SCOPE); // Search object only
// Invoke search method that will use the LDAP "compare" operation
NamingEnumeration answer = ctx.search("cn=S. User, ou=NewHires",
"(mySpecialKey={0})",
new Object[]{key}, ctls);
如果比较成功,则结果枚举将包含一个名称为空名称且不包含属性的项目。