Вам необходимо создать собственный AuthenticationHandler и объявить его в своей конфигурации Spring Security, или вы можете написать свой собственный UserDetailsService, который выполняет запрос LDAP за вас.
<authentication-manager>
<authentication-provider user-service-ref="jbossLdapController" >
<password-encoder hash="sha" base64="true" ref="passwordEncoder">
<salt-source ref="saltSource"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
С этим вы можете создать класс, который реализует UserDetailsService
, чтобы получить все функциональные возможности этого без необходимости реализовывать все это вручную, используя обычный пользовательский обработчик аутентификации.
public class JBossLdapController implements UserDetailsService {
ReflectionSaltSource saltSource;
public void setSaltSource(ReflectionSaltSource saltSource) {
this.saltSource = saltSource;
}
ShaPasswordEncoder passwordEncoder;
public void setPasswordEncoder(ShaPasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
// LDAP stuff
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
// Build user details, call LDAP query. User details functionality of Spring will automatically compare user supplied credentials with hash and salt source versus username and encrypted password in UserDetails object.
}
Помните, что это всего лишь пример того, как это можно сделать, не отказываясь от преимуществ функциональности Spring Security UserDetails. Конечно, не зная больше о вашем провайдере LDAP, пароли не могут быть зашифрованы SHA солью.