我想知道是否有人熟悉如何在搜索篩選器中對LDAP中的userCertificate屬性使用二進制值。我知道如何用舊的JNDI API來做到這一點,但我很好奇,如果任何人都可以幫我在Netscape Directory SDK(netscape.ldap)中弄明白。使用Java Netscape目錄LDAP API和二進制篩選器值
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);
我試着用/不用;二進制修飾符,並嘗試了二進制和base64值。但是,做的工作是如果我寫一個自定義的方法來將字節數組轉換爲「\ xx」字符串格式。這似乎有點hackish,可能很慢,所以我想知道是否有一個API本地的方式來做這樣的二進制搜索。
謝謝。
如果你要切換LDAP的API,Netscape的API是十來歲,長出來的任何維護活動,我可以看到的。你可能會更喜歡UnboundID API:@TerryGardner經常在這裏看到它,至少它看起來正在維護中。如果您無法做到這一點,請仔細閱讀LDAP搜索過濾器RFC。 – EJP
謝謝。這個Netscape LDAP API已經在項目中使用了,所以我現在必須用一次性的JNDI設置完成一次搜索。我很想切換到更現代的API,但我正在處理我們所得到的。 :)我會看看我是否可以從RFC中收集任何東西。 – Patrick