Spring Ldap - 多个基本名称

时间:2014-09-02 22:26:00

标签: spring spring-ldap

我只是尝试一下spring ldap / odmnow。看似有趣而且很酷。对不起,如果以下问题太愚蠢了!

我正在尝试使用spring ldap / odm从ldap中检索一些属性。有没有办法在

中配置多个基本名称

@Entry(objectClasses = {“person”} base = {..我可以在这里给多个BASENames ..}) 公共课LdapUser {

@Id
private Name dn;

我正在开发的应用程序在一个OU下定义了用户,在我们的AD中另一个定义了内部TESTER。所以我试图看看我是否可以使用相同的ldap入门类来查找每个人。

3 个答案:

答案 0 :(得分:2)

ContextSource基础用于指定ContextSource所有操作的基础,通常设置为域控制器DN。

您可以使用ODM而无需在@Entry上指定基础(或使用树中较高的基础DN),但在这种情况下,您通常会使用@DnAttribute注释以使框架会自动为您构建DN(主要用于将条目持久化回LDAP)。

如果我们假设您的用户具有以下结构:

dc=example,dc=com,ou=USERS

dc=example,dc=com,ou=TESTERS

现在,如果您在ContextSource上指定基础dc=example,dc=com,您可以让ODM自动处理此问题,如下所述:

@Entry(objectclasses={"person"})
public class Person {
  @Id
  private Name dn;

  @DnAttribute(name="ou", index=0)
  @Transient // Indicates that this is not an attribute on the entry
  private String userType;

  @Attribute(name="cn")
  private String name;

  // More attributes here
}

上面将处理与Person类之间的LDAP条目的自动映射。现在,如果你想找到所有人,请执行:

List<Person> allPersons = ldapTemplate.findAll(Person.class);

如果您想查找所有测试人员,请执行以下操作:

List<Person> testers = ldapTemplate.find(
                            query().base("ou=TESTERS"), 
                            Person.class);

答案 1 :(得分:0)

我对Spring LDAP不是很熟悉,但是(IIRC)LDAP本身只能从单个节点(base)进行搜索。因此,查看the documentation,您可能需要使用LDAPQueryBuilder从组织(o=xx)进行搜索,为ou添加条件。请参阅the javadocs

答案 2 :(得分:0)

这里没有专家,请注意。 至少使用XML配置,您可以连接LdapTemplate实例。一个建议可能是创建一个名为DelegatingLdapTemplate的新实现,它会注入两个常规模板(每个basename一个),然后适当地委托给它们(或者只调用一个,然后另一个如果第一个返回0结果),并且用它来代替普通的模板实例。这当然只有在您的用例真正保证这种行为时才有意义(例如,如果您不知道在哪里搜索用户并且必须检查这两个位置)。否则,只需制作两个单独的bean。