I am trying to understand how Spring LDAP (and not the Spring Security Element) works by setting up the most basic working program, but it seems that the actual authentication is breaking.
This is the error I get:
Exception in thread "main" java.lang.NullPointerException
at org.springframework.ldap.core.support.AbstractContextSource.getReadOnlyContext (AbstractContextSource.java:125)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java:287)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java:237)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java∗88)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java∗46)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java:401)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java:421)
at org.springframework.ldap.core.LdapTemplate.search (LdapTemplate.java:441)
The code executed in the method that throws the exception:
return getContext(authenticationSource.getPrincipal(),
authenticationSource.getCredentials());
So, it seems to me that I need to configure the authentication source in the application context? I am really lost.
Here is my 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();
}
});
}
}
}
source
share