我有一個ldap數據庫。我正在使用inetorgPerson對象類。在這個類中有userPassword屬性。 userPassword值是SHA crypt。我正在使用javax.naming.directory包來獲取userPassword值。但是,返回值與SHA密碼值不同。我如何獲得正確的價值? 一個簡單的代碼是:從Ldap數據庫(ApacheDs)獲取SHA密碼值
public ArrayList<String> search(String base, String filter,String[] returningAttributes){
ArrayList<String> result=new ArrayList<String>();
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
ctls.setReturningAttributes(returningAttributes);
NamingEnumeration resultEnum = null;
try {
resultEnum = ctx.search(base, filter, ctls);
while (resultEnum.hasMore()) {
SearchResult res = (SearchResult) resultEnum.next();
// print DN of entry
// System.out.println(res.getNameInNamespace());
// print attributes returned by search
Attributes attrs = res.getAttributes();
NamingEnumeration e = attrs.getAll();
while (e.hasMore()) {
Attribute attr = (Attribute) e.next();
result.add(attr.toString());
}
System.out.println();
}
return result;
} catch (NamingException e) {
}
return null;
}
我不明白你想要做什麼。你想從存儲的值中獲取原始密碼,這是SHA原始密碼的哈希值嗎? –
不,沒有人可以從SHA密碼值訪問原始密碼。比方說,我在jsf 2中的文本框中輸入了一個密碼,然後從輸入的密碼創建了SHA密碼。在此操作之後,我想將ldap中的sha密碼與我的jsf 2密碼進行比較。但是我無法從LDAP獲取正確的SHA值。返回值是[B0X ..等,但期望的值是:{SHA} fEqNCco3Yq9h5ZUglD3CZJT4lBs = – olyanren
代碼在循環訪問屬性值之前必須遍歷「屬性選項」。 –