我试图找出是否有人熟悉如何在搜索过滤器中针对 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-native 方式来进行这样的二进制搜索。
谢谢。