当我尝试从ldap服务器搜索用户的密码时 显示以下错误
在此代码中,它不会在String中返回用户密码。它抛出
java.lang.ClassCastException: [B cannot be cast to java.lang.String
代码:
public class selectEntry {
DirContext ldapContext = null;
public selectEntry() {
try {
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, url);
environment.put(Context.SECURITY_AUTHENTICATION, conntype);
environment.put(Context.SECURITY_PRINCIPAL, AdminDn);
environment.put(Context.SECURITY_CREDENTIALS, password);
ldapContext = new InitialDirContext(environment);
System.out.println("Bind successful");
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void getEntry() {
try {
SearchControls searcCon = new SearchControls();
searcCon.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results
= ldapContext.search("uid=aruhat.aruhat,ou=openzki,dc=aruhat,dc=co,dc=in", "(uid=aruhat.aruhat)", searcCon);
if (results != null) {
while (results.hasMore()) {
SearchResult res = (SearchResult) results.next();
Attributes atbs = res.getAttributes();
Attribute atb = atbs.get("userPassword");
String name = (String) atb.get();
System.out.println("Name is :=> " + name);
}
} else {
System.out.println("fail");
}
} catch (Exception e) {
System.out.println("Exception Type:=> "+e);
System.out.println("Exception Message:=> "+e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] args) {
new selectEntry().getEntry();
}
}
答案 0 :(得分:0)
LDAP密码存储为哈希值,而不是字符串。除了byte[]
之外,属性值将返回 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.ShowDialog();
}
}
}
。
但是,您没有任何充分的理由首先获得哈希密码属性。它对你没有任何好处。检查您的要求。您应该使用旧密码作为用户进行绑定,以测试它是否有效,而不是尝试读取密码,这是您无法获得的。
答案 1 :(得分:-1)
重新获取二进制属性需要hostname
后缀,例如;binary
。然后你有userCertificate;binary
对象。调用
Attribute
你完成了。不要与byte[] bytes = (byte[]) attr.get()
或toString()
演员合作。