Я пытаюсь интегрировать 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-сервера: