Printemps LDAP utilisation de base
Je suis à essayer de comprendre comment le Printemps LDAP (pas le Printemps de sécurité de chose) fonctionne par la mise en place le plus de travail de base du programme, mais il semble que l'authentification des pauses.
C'est l'erreur que je reçois:
Exception in thread "main" java.lang.NullPointerException au org.springframework.ldap.core.support.AbstractContextSource.getReadOnlyContext(AbstractContextSource.java:125) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:287) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:237) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:588) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:546) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:401) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:421) au org.springframework.ldap.de base.LdapTemplate.recherche(LdapTemplate.java:441)
Le code qui est exécuté dans la méthode de jeter l'exception est la suivante:
return getContext(authenticationSource.getPrincipal(),
authenticationSource.getCredentials());
Il semble donc que j'ai besoin de configurer une authentification de la source dans le contexte de l'application? Je suis vraiment perdu.
Voici mon code:
package se.test.connector.ldap;
import java.util.List;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;
import org.springframework.ldap.filter.EqualsFilter;
public class LdapTest {
public static void main(String[] args) {
LdapContextSource ctxSrc = new LdapContextSource();
ctxSrc.setUrl("ldap://<ldapUrl>:389");
ctxSrc.setBase("DC=bar,DC=test,DC=foo");
ctxSrc.setUserDn("<username>@bar.test.foo");
ctxSrc.setPassword("<password>");
LdapTemplate tmpl = new LdapTemplate(ctxSrc);
PersonDao dao = new PersonDao(tmpl);
dao.getAllPersonNames();
}
public static class PersonDao {
private LdapTemplate ldapTemplate;
public PersonDao(LdapTemplate ldapTemplate) {
this.ldapTemplate = ldapTemplate;
}
public void setLdapTemplate(LdapTemplate ldapTemplate) {
this.ldapTemplate = ldapTemplate;
}
public List getAllPersonNames() {
EqualsFilter filter = new EqualsFilter("objectclass", "person");
return ldapTemplate.search(DistinguishedName.EMPTY_PATH,
filter.encode(),
new AttributesMapper() {
public Object mapFromAttributes(Attributes attrs) throws NamingException {
return attrs.get("cn").get();
}
});
}
}
}
Vous devez vous connecter pour publier un commentaire.
Il semble, sur la surface. Une seule chose, votre userDn n'est pas vraiment un bon nom unique. Il devrait être sur le format "
CN=<...>, DC=bar, DC=test, DC=foo
". Puisque vous ne donnent pas de précisions sur les serveur LDAP à l'aide de ou comment votre structure de répertoire de l'air (OU de la structure etc...) il est difficile d'être plus précis.J'avais un Problème similaire - aussi avec
NullPointerException
.Ce qui a résolu mon Problème était un appel de afterPropertiesSet():