Я выполняю аутентификацию Spring ldap с использованием приведенного ниже кода, который я получаю от github https://gist.github.com/mpilone/7582628
// Setup the LDAP client (normally done via Spring context file).
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl("ldap://server.comp.com:123");
contextSource.setBase("DC=AD,DC=comp,DC=COM");
contextSource.setUserDn("readonlyuser@ad.comp.com");
contextSource.setPassword("password1");
contextSource.afterPropertiesSet();
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
ldapTemplate.afterPropertiesSet();
// Perform the authentication.
Filter filter = new EqualsFilter("userid", "testuser");
boolean authed = ldapTemplate.authenticate("dc=your,oc=base,dc=dn",
filter.encode(),
"user-entered-password");
// Display the results.
System.out.println("Authenticated: " + authed);
после выполнения приведенного выше фрагмента, я получаю следующее исключение
org.springframework.ldap.NoPermissionException: [LDAP: код ошибки 50 - анонимный доступ не разрешен!]
Но в то же время, если я ищу определенного пользователя через ldap с помощьюкод ниже
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, "ldap://server.comp.com:123");
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
environment.put(Context.SECURITY_PRINCIPAL, "DC=AD,DC=comp,DC=COM");
environment.put(Context.SECURITY_CREDENTIALS, "password1");
DirContext dirContext = null;
NamingEnumeration<?> results = null;
try {
dirContext = new InitialDirContext(environment);
/**
* Retrieve the specific attributes
*/
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(new String [] {
"nsRole",
"userid",
"objectClass",
"givenName",
"sn",
"cn"
});
//Get entries having objectclass=person
String filter = "(&(objectclass=person)(userid=testuser))";
results = dirContext.search("dc=your,oc=base,dc=dn", filter, controls);
while (results.hasMore()) {
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
NamingEnumeration<? extends Attribute> attrs = attributes.getAll();
while (attrs.hasMore()) {
System.out.println(attrs.next());
}
}
Теперь мне нужно пройти проверку подлинности. Нужна помощь для решения проблемы
Спасибо