Ich versuche, Spring Data und das LdapRepository API zu verwenden, um Benutzerdaten in Ldap zu lesen, zu aktualisieren und zu erstellen. Ich konnte lesen und erfolgreich zu aktualisieren, aber wenn ich mich diesen Fehler einen neuen Datensatz einzufügen versuchen erhalten:Erstellen neuer Benutzer mit Spring Data LdapRepository schlägt mit LDAP-Fehlercode fehl 32
2017-07-25 17:31:01.966 ERROR 14404 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is org.springframework.ldap.NameNotFoundException:
[LDAP: error code 32 - The search base entry '[email protected],ou=people,ou=myou,dc=bar,dc=foo' does not exist];
nested exception is javax.naming.NameNotFoundException:
[LDAP: error code 32 - The search base entry '[email protected],ou=people,ou=myou,dc=bar,dc=foo' does not exist]; remaining name '[email protected]']
with root cause
javax.naming.NameNotFoundException: [LDAP: error code 32 - The search base entry '[email protected],ou=people,ou=myou,dc=bar,dc=foo' does not exist]
Mein application.properties ist:
user-api.ldap.contextSource.url=ldap://server.address.com:1389
user-api.ldap.contextSource.userDn=cn=manager role
user-api.ldap.contextSource.password=apasswordwashere
user-api.ldap.contextSource.base=ou=people,ou=myou,dc=bar,dc=foo
Meine Repo-Schnittstelle, LdapUserRepository .java:
public interface LdapUserRepository extends LdapRepository<LdapUser>{
LdapUser findByCn(String cn);
LdapUser findBySn(String sn);
LdapUser save(LdapUser ldapUser);
}
ich die gleiche Antwort, ob ich die speichern Methode explizit aus.
Meine Konfiguration ist in LdapConfiguration.java getan:
@Configuration
@EnableLdapRepositories(basePackages = "foo.bar.userapi.dao.ldap", ldapTemplateRef="userLdapTemplate")
public class LdapConfiguration {
@Autowired
Environment env;
@Bean
public LdapContextSource contextSource() {
LdapContextSource contextSource= new LdapContextSource();
contextSource.setUrl(env.getRequiredProperty("user-api.ldap.contextSource.url"));
contextSource.setBase(env.getRequiredProperty("user-api.ldap.contextSource.base"));
contextSource.setUserDn(env.getRequiredProperty("user-api.ldap.contextSource.userDn"));
contextSource.setPassword(env.getRequiredProperty("user-api.ldap.contextSource.password"));
return contextSource;
}
@Bean(name="userLdapTemplate")
public LdapTemplate ldapTemplate() {
return new LdapTemplate(contextSource());
}
}
Und meine Prüfroutine:
public void test() {
LdapUser ldapUser = new LdapUser();
ldapUser.setCn("198777777");
ldapUser.setCountry("United States");
ldapUser.setGivenName("Hepsibah");
ldapUser.setIsActive("true");
ldapUser.setSn("Testerson91");
ldapUser.setStatus("active");
ldapUser.setUid(LdapUtils.newLdapName("[email protected]"));
ldapUser.setUserModifyTimestamp("20160222145439Z");
ldapUser.setUserPassword("Password-12345");
ldapUser = ldapUserRepository.save(ldapUser);
}
Um Stress, die Konfiguration für alles außer Einsätze funktioniert, denn wenn ich so etwas tun funktioniert es:
public void test2() {
LdapUser ldapUser = ldapUserRepository.findBySn("Testerson");
if (ldapUser != null) {
System.out.println(ldapUser.getUid().toString());
System.out.println("result: " + ldapUser.toString());
ldapUser.setSn("Testerson2");
ldapUser.setUserPassword("Password-12345!");
ldapUser = ldapUserRepository.save(ldapUser);
ldapUser = ldapUserRepository.findBySn("Testerson2");
if (ldapUser != null) {
System.out.println("result: " + ldapUser.toString());
}
}
}
Ich vermute, dass die Antwort mit 0 zu tun sein kann, aber ich gebe das dn während des Speichervorgangs nicht explizit hinzu, und ein Aktualisierungsvorgang funktioniert einwandfrei.
Das Abrufen eines Datensatzes, das Ändern des uid-Werts und das Speichern desselben führt zu demselben Fehler. Das Abrufen eines Datensatzes und das Überprüfen der UID zeigt nur den Teil "[email protected]" und nicht den Teil "ou = people, ou = myou, dc = bar, dc = foo".
Checkout https://stackoverflow.com/questions/33288011/ldaprepository-update-spring-ldap P. – Philip