public boolean addUserToLdap(String userCn) {
LdapContext ctx = getLdapConnection() //AD认证,获取Ldap连接对象ctx
Attributes attrsbu = new BasicAttributes(true)
BasicAttribute objclassSet = new BasicAttribute("objectclass")
for (String _class : LdapConfig.userObjectClass.split(",")) {
objclassSet.add(_class.trim()) //加入一些基本元素top,person,organizationalPerson,user
}
boolean isExist = this.searchUser(ctx, userCn)//添加用户前先查找AD中是否存在该用户
if (isExist == false){
attrsbu.put(objclassSet)
attrsbu.put(new BasicAttribute("cn", userCn)) //userCn:要添加的用户
attrsbu.put(new BasicAttribute("sAMAccountName", userCn))
attrsbu.put(new BasicAttribute("sn", userCn))
attrsbu.put(new BasicAttribute("displayName", userCn))//AD中显示的名称
attrsbu.put(new BasicAttribute("userPrincipalName", userCn + LdapConfig.domainName))
try {
String userDn = "cn=" +userCn + ","+ LdapConfig.userRootDn
ctx.createSubcontext(userDn, attrsbu) //添加用户到Ldap
System.out.println("[addUserToLdap] Add User:" + userDn)
ModificationItem[] mods = new ModificationItem[2]
//此密码必须注意:得到的字符串是""password""这种格式
String newQuotedPassword = LdapConfig.user_default_password
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE")
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute(LdapConfig.password_field,newUnicodePassword))
mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute(LdapConfig.userAccountControl,Integer.toString(
UF_NORMAL_ACCOUNT
+ UF_PASSWORD_EXPIRED
+ UF_DONT_EXPIRE_PASSWD)))
ctx.modifyAttributes(userDn, mods) //更改用户密码和权限
} catch (Exception e1){
e1.printStackTrace()
destroyLdapConnection(ctx)
return false
}
}else{
System.out.println("isExist :" + isExist + "用户:" + userCn + "已存在")
}
destroyLdapConnection(ctx)
return true
}
你使用的是哪个LDAP产品?不同的产品一般有自带的工具,可以方便管理。另外,你这个问题的描述,不清楚是什么意思。
如果,你的意思是某个对象下面,你把他的某个属性,url删除了,想添加回来。除了用工具,还有一种最通用的办法是写LDIF文件,使用:
dn: 对象全路径
changetype: modify
add: url
url=值
这样的格式,把属性添加上去。
如果,你是把url属性,从整个schema里面删除了,那就使用schema的语法。先创建这个url属性。然后再把这个属性加到相应的类里面。当然,如果使用工具,会有向导式的 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)