Java SpringLDAP将用户添加到组
我正在使用SpringLDAP 2.04和OpenLDAP。我正在尝试使用上的模型代码将LDAP用户添加到组中。这是我的代码:Java SpringLDAP将用户添加到组,java,spring,ldap,Java,Spring,Ldap,我正在使用SpringLDAP 2.04和OpenLDAP。我正在尝试使用上的模型代码将LDAP用户添加到组中。这是我的代码: public void addPersonToRole(String roleName, IUser user){ Name roleDn = buildGroupDn(roleName); Name userDn = buildDn(user); DirContextOperations ctx = ldapTempla
public void addPersonToRole(String roleName, IUser user){
Name roleDn = buildGroupDn(roleName);
Name userDn = buildDn(user);
DirContextOperations ctx = ldapTemplate.lookupContext(roleDn);
ctx.addAttributeValue("uniqueMember",userDn);
try{
ldapTemplate.modifyAttributes(ctx);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
protected Name buildDn(IUser user){
return buildUserDnFromString("People",user.getUid());
}
protected Name buildUserDnFromString(String company, String userID){
return LdapNameBuilder.newInstance()
.add("ou", company)
.add("uid", userID)
.build();
}
protected Name buildGroupDn(String groupName){
return LdapNameBuilder.newInstance("ou=Roles")
.add("cn",groupName)
.build();
}
这在一定程度上起作用。用户将作为唯一成员添加到组中,但没有完全限定的LDAP名称,即,添加的不是uid=user,而是ou=People,dc=company,dc=comonlyuid=user,ou=People。buildDn()方法也在my create()方法中被调用,并且包含完整的LDAP路径以成功创建新用户
public void create(IUser user) {
DirContextAdapter context = new DirContextAdapter(buildDn(user));
mapToContext(user, context);
try{
ldapTemplate.bind(context);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
protected void mapToContext(IUser user, DirContextOperations context){
context.setAttributeValues("objectclass", new String[] { "top",
"person", "pilotPerson", "OpenLDAPperson" });
context.setAttributeValue("uid", user.getUid());
context.setAttributeValue("cn", user.getFullName());
context.setAttributeValue("sn", StringUtils.substringAfterLast(user.getFullName()," "));
if(StringUtils.isNotBlank(user.getDescription())) context.setAttributeValue("description", user.getDescription());
if(StringUtils.isNotBlank(user.getUserPassword())) context.setAttributeValue("userPassword", user.getUserPassword());
if(StringUtils.isNotBlank(user.getEmail())) context.setAttributeValue("mail",user.getEmail());
}
mapToContect()调用是否起到了作用?如果我尝试显式地将公司信息添加到用户DN,则会出现格式错误的uniqueMember对象错误
我的java类实现BaselDaNameAware,beans定义XML中包含以下内容:
<bean class="org.springframework.ldap.core.support.BaseLdapPathBeanPostProcessor"/>
两个问题:1。我的代码中是否存在阻止组添加的错误?2.为什么将公司信息(即LDAP基本路径)放在组添加上而不是创建上?这两个操作(“创建用户”和“将用户添加到组”)之间的区别在于,第一个操作创建用户条目(DN=userDN),第二个操作更新组条目(DN=groupDN)。换句话说,如果愿意,这两个操作将针对两种不同的“类型”条目执行 Spring会自动将基本DN(dc=company,dc=com)附加到用于创建上下文的DN中,但不会将其添加到其他属性中,例如
uniqueMember
创建用户时,使用用户DN创建上下文:
DirContextAdapter context = new DirContextAdapter(buildDn(user));
更新组时,请改用groupDN:
DirContextOperations ctx = ldapTemplate.lookupContext(roleDn);
也就是说,要修复代码,您需要将uniqueMember属性设置为用户的完整DN,如以下示例所示:
ctx.addAttributeValue("uniqueMember","uid=user, ou=People, dc=company,dc=com");
希望这能回答你的问题你的问题到底是什么?你面临的问题是什么?