Получить список пользователей из группы LDAP в Spring Boot
У меня тестовый ldap сервер поднимается вместе со Spring Boot настройки
spring.ldap.embedded.base-dn=dc=javausecase,dc=com
spring.ldap.embedded.ldif=classpath:schema.ldif
spring.ldap.embedded.port=8389
spring.ldap.embedded.url=ldap://localhost:8389/
spring.ldap.embedded.validation.enabled=false
содержимое ldif
dn: dc=javausecase,dc=com
objectclass: top
objectclass: domain
objectclass: extensibleObject
dc: javausecase
dn: ou=groups,dc=javausecase,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups
dn: ou=subgroups,ou=groups,dc=javausecase,dc=com
objectclass: top
objectclass: organizationalUnit
ou: subgroups
dn: ou=people,dc=javausecase,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people
dn: cn=one,ou=groups,dc=javausecase,dc=com
cn: one
objectClass: top
objectClass: posixGroup
gidNumber: 1100
description: UNIX systems administrators
memberUID: 111,222
dn: cn=two,ou=groups,dc=javausecase,dc=com
cn: two
objectClass: top
objectClass: posixGroup
gidNumber: 801
description: Network Service Switch Proxy
memberUID: 222
dn: uid=111,ou=people,dc=javausecase,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: 111
sn: 111
uid: 111
gidNumber: 111
userPassword: {SHA}fDYHuOYbzxlE6ehQOmYPIfS28/E=
dn: uid=222,ou=people,dc=javausecase,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: 222
sn: 222
uid: 222
gidNumber: 222
userPassword: {SHA}fDYHuOYbzxlE6ehQOmYPIfS28/E=
я хочу протестировать что удалось положить пользователей по группам.
Как можно проверить что пользователь 111 лежит в группе one а пользователь 222 в группах 111 & 222?
Я написал такой вот запрос
List<Attribute> attributes = ldapTemplate.search(
query().where("objectclass").is("posixGroup"),
new AttributesMapper<Attribute>() {
public Attribute mapFromAttributes(Attributes attrs)
throws NamingException {
return attrs.get("cn");
}
});
он возвращает 2 атрибута one и two, но как мне вытащить дальше из этих атрибутов содержимое memberUID
я не совсем понимаю.
Ответы (1 шт):
Из документации видим, что нужно реализовать свой класс, отражающий юзера в системе LDAP и маппер для этого класса.
Делаем.
public class LdapPerson {
private String fullName;
private String lastName;
private String memberUID;
//getters & setters here
}
public List<LdapPerson> getPersons(String name) {
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
sc.setReturningAttributes(new String[]{"cn", "sn", "memberUID"});
String filter = "(&(objectclass=posixGroup)(cn=" + name + "))";
List<LdapPerson> persons = ldapTemplate.search(new LdapName(""), filter, sc, new PersonAttributesMapper());
return persons;
}
private class PersonAttributesMapper implements AttributesMapper<LdapPerson> {
LdapPerson person = new LdapPerson();
Attribute fullName = attrs.get("cn");
if (fullName != null) {
person.setFullName = (String) fullName.get();
}
Attribute lastName = attrs.get("sn");
if (lastName != null) {
person.setLastName = (String) lastName.get();
}
Attribute memberUID = attrs.get("memberUID");
if (memberUID != null) {
person.setMemberUID = (String) memberUID.get();
}
return person;
}
Как-то так.
Если не нужна сущность LDAP, тогда там в документации ниже есть пример как построить конкретный запрос, чтобы вытащить нужную инфу через LdapQuery.