文档

Java™教程
隐藏目录
LDAP比较
路径: Java命名和目录接口
课程: LDAP用户的高级主题
章节: 更多LDAP操作

LDAP比较

LDAP的“compare”操作允许客户端询问服务器是否具有指定条目的属性/值对。这使得服务器能够保持某些属性/值对的机密性(即,不公开供常规“搜索”访问),同时仍然允许客户端有限地使用它们。例如,某些服务器可能将此功能用于密码,尽管客户端在“compare”操作本身中传递明文密码是不安全的。

在JNDI中,可以使用以下方法的适当约束参数来实现此功能:

  1. 过滤器必须采用“(名称=值)”的形式。您不能使用通配符。
  2. 搜索范围必须是SearchControls.OBJECT_SCOPE
  3. 您必须请求不返回任何属性。如果不满足这些条件,那么这些方法将使用LDAP的“搜索”操作而不是LDAP的“compare”操作。

这里是一个导致使用LDAP的“compare”操作的示例

// 属性的值
byte[] key = {(byte)0x61, (byte)0x62, (byte)0x63, (byte)0x64, 
              (byte)0x65, (byte)0x66, (byte)0x67};

// 设置搜索控件
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(new String[0]);       // 不返回任何属性
ctls.setSearchScope(SearchControls.OBJECT_SCOPE); // 仅搜索对象

// 调用将使用LDAP的“compare”操作的搜索方法
NamingEnumeration answer = ctx.search("cn=S. User, ou=NewHires", 
                                      "(mySpecialKey={0})", 
                                       new Object[]{key}, ctls);

如果比较成功,结果枚举将包含一个名称为空且不包含任何属性的单个项。


上一页:更多LDAP操作
下一页:搜索结果