Как мне получить доступ к паролю пользователя из LDAP в LdapUserDetailsMapper с помощью Spring Security? - PullRequest
2 голосов
/ 07 сентября 2011

Мы используем Spring Security в нашем веб-приложении на основе Spring MVC.

Мы выполняем аутентификацию, используя модуль безопасности Spring LDAP, который работает правильно.Теперь мне нужно получить пароль пользователя из LDAP для сохранения в базе данных.

Для этого я использую это в своем коде.

    public class PersonContextMapper implements UserDetailsContextMapper {

    public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<GrantedAuthority> authorities) {
    Person.Essence p = new Person.Essence(ctx);

    p.setUsername(username);
    p.setAuthorities(authorities);

        Object passwordValue = ctx.getObjectAttribute("userPassword");

    return p.createUserDetails();

    }

    public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
    Assert.isInstanceOf(Person.class, user, "UserDetails must be a Person instance");

    Person p = (Person) user;
    p.populateContext(ctx);
    }
}

Но я не получаю никакого значения для пароля.Всегда ноль.

Пожалуйста, помогите.

PS.Моя аутентификация прошла успешно.Это означает, что пароль, введенный в форму входа, соответствует паролю, хранящемуся в LDAP.

1 Ответ

2 голосов
/ 07 сентября 2011

Возможно, что состояние аутентификации соединения не имеет разрешения на чтение значения атрибута userPassword. Чаще всего приложения выдают запрос BIND на сервер каталогов, включая необходимые элементы управления при необходимости. Пароль включен в запрос BIND, и сервер каталогов изменяет состояние аутентификации соединения после успешного завершения запроса BIND. В любом случае значение атрибута userPassword шифруется или хэшируется чаще, чем нет, и приложениям не нужно считывать значение.

...