有玩过LDAP的大牛吗?本人现在要从AD域里读出来里边的用户加到本人的数据库里,然后把本人数据库里的用户名和密

J2EE 码拜 8年前 (2016-01-29) 1944次浏览
以下是本人的代码还有错误信息
String userName = “administrator”; // 用户名称
String password = “123.com”; // 密码
String host = “192.168.10.10”; // AD服务器
String port = “389”; // 端口
String domain = “@vdidomain.user.com”; // 邮箱的后缀名
String url = new String(“ldap://” + host + “:” + port);
String user = userName.indexOf(domain) > 0 ? userName : userName + domain;
Hashtable env = new Hashtable();
DirContext ctx;
env.put(Context.SECURITY_AUTHENTICATION, “simple”);
env.put(Context.SECURITY_PRINCIPAL, user); // 不带邮箱后缀名的话,会报错,具体原因还未探究。高手可以解释分享。
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.INITIAL_CONTEXT_FACTORY,”com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER_URL, url);

try {
ctx = new InitialLdapContext(env, null);

Attributes attrs = new BasicAttributes(true);
Attribute objclass = new BasicAttribute(“objectclass”);
// 添加ObjectClass
String[] attrObjectClassPerson = { “inetOrgPerson”, “organizationalPerson”, “person”, “top” };
Arrays.sort(attrObjectClassPerson);
for (String ocp : attrObjectClassPerson) {
objclass.add(ocp);
}
attrs.put(objclass);
String uid = “zhangsan”;
//CN=ceshi,CN=Users,DC=vdidomain,DC=user,DC=com
//”cn=Users,dc=vpn,dc=redcross,dc=org,dc=com”
String userDN = “uid=” + uid + “,” + “CN=Users,DC=vdidomain,DC=user,DC=com”;
// 密码处理
attrs.put(“cn”, uid);
attrs.put(“sn”, uid);
attrs.put(“displayName”, “张三”);
attrs.put(“mail”, “”);
attrs.put(“description”, “”);
attrs.put(“userPassword”, “password”);
ctx.createSubcontext(userDN, attrs);
System.err.println(“成功”);
错误信息:javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 21 – 00000057: LdapErr: DSID-0C090D11, comment: Error in attribute conversion operation, data 0, v23f0  remaining name “”uid=zhangsan,CN=Users,DC=vdidomain,DC=user,DC=com””
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3100)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3033)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2840)
at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(LdapCtx.java:811)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(ComponentDirContext.java:337)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:266)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:254)
at javax.naming.directory.InitialDirContext.createSubcontext(InitialDirContext.java:197)
at com.chinaops.web.edesktop.test.LDAPTest3.main(LDAPTest3.java:62)
Throw Exception : javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 21 – 00000057: LdapErr: DSID-0C090D11, comment: Error in attribute conversion operation, data 0, v23f0


喜欢 (0)
[1034331897@qq.com]
分享 (0)