Spring data Ldap Repository возвращает empry List при использовании findAll - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь интегрировать ldap с пружиной, используя

<dependency>
            <groupId>org.springframework.ldap</groupId>
            <artifactId>spring-ldap-core</artifactId>
            <version>2.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-ldap</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>

Я пытаюсь выбрать всех пользователей, которые у меня есть в нашем тестовом сервере Ldap, но когда я использую метод findAll интерфейса LdapRepository, все, что я получаю, это пустойсписок.Я много читал в Интернете, много документов, но я не нашел, что не так с этой задачей, которую я пытаюсь сделать.

Вот несколько примеров кода: Файл конфигурации:

@Configuration
@PropertySource("classpath:application.yaml")
@EnableLdapRepositories(basePackages = "gr.mpass.aia.ldap")
public class AppConfig {

    @Autowired
    private Environment env;

    @Bean
    public LdapContextSource contextSource() {
        LdapContextSource contextSource = new LdapContextSource();
        contextSource.setUrl(env.getRequiredProperty("ldap.url"));
        contextSource.setUserDn(env.getRequiredProperty("ldap.principal"));
        contextSource.setPassword(env.getRequiredProperty("ldap.password"));
        return contextSource;
    }

    @Bean
    public LdapTemplate ldapTemplate() {
        return new LdapTemplate(contextSource());
    }

    @Bean
    public LdapClientService ldapClient() {
        return new LdapClientService();
    }

}

Класс записи:

@Entry(base = "cn=eshop,ou=mpass,cn=admin,dc=userlogin,dc=mpass,dc=ltd", objectClasses = { "posixGroup", "inetOrgPerson", "top" })
public class LdapUser {

    @Id
    private Name id;

    private @Attribute(name = "cn") String fullName;
    private @Attribute(name = "mail") String email;
    private @Attribute(name = "uidNumber") String uidNumber;

    public LdapUser() {
    }

    public LdapUser(String fullName, String email, String uIdNumber) {
        this.fullName = fullName;
        this.email = email;
        this.uidNumber = uidNumber;
    }

    public Name getId() {
        return id;
    }

    public void setId(Name id) {
        this.id = id;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String password) {
        this.email = email;
    }

    public String getUidNumber() {
        return uidNumber;
    }

    public void setUidNumber(String uidNumber) {
        this.uidNumber = uidNumber;
    }

    @Override
    public String toString() {
        return fullName;
    }

}

Репозиторий:

@Repository
public interface LdapUserRepository extends LdapRepository<LdapUser> {

    LdapUser findByFullName(String fullName);

    LdapUser findByEmail(String email);

    LdapUser findByUidNumber(String uidNumber);

    List<LdapUser> findByEmailLikeIgnoreCase(String email);

    List<LdapUser> findByEmailNotLike(String email);

}

Запрос пользователей:

  LdapQuery query = query().base("cn=eshop,ou=mpass,cn=admin,dc=userlogin,dc=mpass,dc=ltd")
                .searchScope(SearchScope.ONELEVEL)
                .where("objectclass").is("inetOrgPerson");
        Iterable<LdapUser> ldapUsers = ldapUserRepository.findAll(query);

Возвращает пустой список.

Я попытался ldapUserRepository.findAll () без параметра, но он не работает.Это говорит javax.naming.NameNotFoundException: [LDAP: код ошибки 32 - Нет такого объекта].

Я попробовал этот ответ https://stackoverflow.com/a/48384297/1501205, но это не помогает вообще.

Любойпомощь будет оценена.Заранее спасибо Вот принтскрин дерева Ldap-сервера: enter image description here

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

У меня был неправильный ObjectClass в моей записи. PosixGroup был не прав. Я заменил его на PosixAccount, и он работает.

0 голосов
/ 27 марта 2019

Вы указали полный номер вашей записи в качестве базы в объекте запроса и записи. Я думаю, что-то не так с этим. Правильный путь:

в конфигурации: "cn=admin,dc=userlogin,dc=mpass,dc=ltd" и в записи: "cn=eshop,ou=mpass"

...