java - 使用 Java Netscape Directory LDAP API 和二进制过滤器值

标签 java ldap

我试图找出是否有人熟悉如何在搜索过滤器中针对 LDAP 中的 userCertificate 属性使用二进制值。我知道如何使用旧的 JNDI API 执行此操作,但我很好奇是否有人可以帮助我在 Netscape Directory SDK (netscape.ldap) 中解决这个问题。

JNDI API 示例:

byte[] userCert = Base64.decodeBase64(base64Certificate);
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapURL);
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
InitialDirContext context = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(fetchArray);
Enumeration<SearchResult> results = context.search(baseDN, "userCertificate={0}", new Object[] {userCert}, controls);

想要做的是使用以下API,但它没有得到任何结果,而上面的代码却得到了:

byte[] userCert = Base64.decodeBase64(base64Certificate);
LDAPConnection ld = new LDAPConnection();
ld.connect(ldapURL, ldapPort);

ld.authenticate(username, password);

LDAPSearchResults results = ld.search(baseDN, LDAPConnection.SCOPE_SUB, "(userCertificate;binary=" + base64Certificate + ")",
                fetchArray, false);

我尝试过使用/不使用 ;binary 修饰符,并且尝试了二进制和 base64 值。但是,如果我编写一个自定义方法将字节数组转换为“\xx”字符串格式,那么起作用。这看起来有点 hackish,而且可能很慢,所以我想知道是否有一种 API 原生方法可以进行这样的二分搜索。

谢谢。

最佳答案

如果您想要为数据类型显示为二进制十六进制值的属性(相应的数据类型通常称为“八位字节字符串”)编写过滤器,那就是完全不同的事情了。

如果要过滤此类二进制属性,则必须声明必须以十六进制代码进行比较的每个字节。例如,如果您搜索属性为“Inventory”且值为 0x01AAF5EF 的对象,则相应的过滤器将必须读取:

(Inventory=\01\aa\f5\ef)

不幸的是,搜索二进制属性时不允许使用通配符搜索!

Try this link for more

关于java - 使用 Java Netscape Directory LDAP API 和二进制过滤器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653410/

相关文章:

Java - 从 ANTLR 4 访问者实现生成 JVM 字节码

java - 通过 SSL 的 LDAP 连接不适用于参数 "com.sun.jndi.ldap.connect.timeout"

php - 在 CentOS 5.5 上为 php 5.3 安装 ldap 时出错

java - 你如何在 Lucene 4.1 中索引和搜索数字

java - Spring Boot 安全 403 重定向

windows - LDAP 查询 - 从给定的 AD 通讯​​组获取所有成员的电子邮件?

delphi - 如何在 Delphi 中对 Windows 域用户进行身份验证?

java - 在 REST API 上对 SSL 进行单元测试

java - 为什么Hibernate STRING无法解析?

java - Java 中的 vector 距离计算 - 优化