Spring LDAP + @Entry + base属性 - 不工作

时间:2017-05-04 21:08:29

标签: spring ldap base odm

我有以下目录结构,并且正在使用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一起使用?

感谢。

1 个答案:

答案 0 :(得分:0)

我见过同样的问题。但是,我建议这个答案: https://stackoverflow.com/a/25658026/6157415

LdapRepository 使用“ @Entry base =“参数,而不是LdapTemplate使用。