我只是尝试一下spring ldap / odmnow。看似有趣而且很酷。对不起,如果以下问题太愚蠢了!
我正在尝试使用spring ldap / odm从ldap中检索一些属性。有没有办法在
中配置多个基本名称
或
@Entry(objectClasses = {“person”} base = {..我可以在这里给多个BASENames ..}) 公共课LdapUser {
@Id
private Name dn;
我正在开发的应用程序在一个OU下定义了用户,在我们的AD中另一个定义了内部TESTER。所以我试图看看我是否可以使用相同的ldap入门类来查找每个人。
答案 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。