Я бегу с Spring Security 3.2.9 RELEASE, пытаясь получить доступ к AD с помощью SpringSecurityLdapTemplate, столкнувшись с этой проблемой.LdapCtx нельзя отнести к DirContextAdapter
зависимостей весна-безопасность-3.2.9.RELEASE.jar LDAP весны-ядро LDAP-1.3.2.RELEASE.jar
деталь Проблема, как показано ниже: java.lang.ClassCastException: com.sun.jndi.ldap.LdapCtx не может быть приведен к org.springframework.ldap.core.DirContextAdapter на org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal (SpringSecurityLdapTemplate.java:219)
из кода
try {
while (resultsEnum.hasMore()) {
SearchResult searchResult = resultsEnum.next();
DirContextAdapter dca = (DirContextAdapter) searchResult.getObject();
Assert.notNull(dca, "No object returned by search, DirContext is not correctly configured");
if (logger.isDebugEnabled()) {
logger.debug("Found DN: " + dca.getDn());
}
results.add(dca);
}
} catch (PartialResultException e) {
LdapUtils.closeEnumeration(resultsEnum);
logger.info("Ignoring PartialResultException");
}
Кажется, он пытается отобразить результат поиска в DirContextAdapter, не знаю, почему он не может отличить.
Весь мой код работает нормально с пружинной безопасностью-3.1.0 Release, потому что 3.1.0 с использованием различной логики
try {
while (resultsEnum.hasMore()) {
SearchResult searchResult = resultsEnum.next();
// Work out the DN of the matched entry
DistinguishedName dn = new DistinguishedName(new CompositeName(searchResult.getName()));
if (base.length() > 0) {
dn.prepend(searchBaseDn);
}
if (logger.isDebugEnabled()) {
logger.debug("Found DN: " + dn);
}
results.add(new DirContextAdapter(searchResult.getAttributes(), dn, ctxBaseDn));
}
} catch (PartialResultException e) {
LdapUtils.closeEnumeration(resultsEnum);
logger.info("Ignoring PartialResultException");
}
Как решить эту проблему?