我有以下目录结构,并且正在使用ODM和Spring LDAP(v 2.3.1.RELEASE)。
以下是我正在处理的目录结构。
dc=example,dc=com
dc=studentBase,dc=example,dc=com
我在config.xml中声明了ldap上下文源的基础,如下所示:
<ldap:context-source
id="ldapContextSource"
url="ldap://ldaphost:389"
username="cn=ldaptestadmin,cn=Administrators,cn=config"
password="abcxyz"
base="dc=studentBase,dc=example,dc=com"/>
<ldap:ldap-template id="ldapTemplate" context-source-
ref="ldapContextSource"/>
要解释问题的背景,以下是详细信息: 我在studentBase下有两个组织单位如下:
ou=groups,dc=studentBase,dc=example,dc=com
ou=people,dc=studentBase,dc=example,dc=com
ou=people
内的每个条目如下:
objectclass: inetorgperson (structural)
objectclass: organizationalPerson (structural)
objectclass: person (structural)
objectclass: top (abstract)
cn: Test Name
sn: Test
givenName: TestName
uid: test1234
userPassword: <SSHA hashed password>
我创建了一个用@Entry注释的bean,如下所示:
@Entry(objectClasses = {"inetOrgPerson", "organizationalPerson", "person", "top" }, base = "ou=people")
public class Student {
@Id
private Name dn;
...
...
...
}
现在,当我尝试在LDAP中创建学生条目时,如下所示
Student objStudent = new Student();
String dn = "uid=testUserName";
Name dnName = new LdapName(dn);
objStudent.setDn(dnName);
ldapTemplate.create(objStudent);
它不是在 ou = people 下创建的,而是在基础dn中创建的( dc = studentBase,dc = example,dc = com )如config.xml中所述。
按Entry javadocs, base 属性如下所示: 此条目的基本DN。如果指定,则将为添加注释的类的条目添加所有计算的可分辨名称。
这不意味着它应该在学生的@Id字段前面加上ou = people吗?
但是,在上面的代码中,如果我为dn属性显式设置ou = person,那么无论我是否在@Entry中都有base属性,它都会在ou = person下创建。
String dn = "uid=testUserName,ou=person";
Name dnName = new LdapName(dn);
我没有在正确的视角中使用@Entry注释的“base”属性吗?
或者有人可以解释这里出了什么问题?
或者它与@DnAttribute一起使用?
感谢。
答案 0 :(得分:0)
我见过同样的问题。但是,我建议这个答案: https://stackoverflow.com/a/25658026/6157415
LdapRepository 使用“ @Entry base =“参数,而不是LdapTemplate使用。