gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:27:13 28 4
gpt4 key购买 nike

我想知道是否有人熟悉如何在搜索过滤器中针对 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”字符串格式, 起作用。这看起来有点老套,而且可能很慢,所以我想知道是否有一种 API 原生方法来进行这样的二进制搜索。

谢谢。

最佳答案

如果您想为其数据类型显示为二进制十六进制值(相应的数据类型通常称为“Octet String”)的属性编写过滤器,则完全不同。

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

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

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

Try this link for more

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com