Получите пароль в закрытии authFail - PullRequest
3 голосов
/ 18 января 2012

Grails 1.3.7 + плагин core-security-core

Есть ли способ восстановить пароль, введенный в форму входа, из закрытия authFail? Я могу получить имя пользователя через

session[UsernamePasswordAuthenticationFilter.SPRING_SECURITY_LAST_USERNAME_KEY] 

но, похоже, нет способа получить пароль.

session[UsernamePasswordAuthenticationFilter.SPRING_SECURITY_FORM_PASSWORD_KEY] 

всегда возвращает ноль.

1 Ответ

0 голосов
/ 28 октября 2012

первый: просто не делай этого.Бьюсь об заклад, все, что вы хотите сделать с этим, нарушит безопасность.Ввод пароля в поле пароля в форме HTML является одним из таких плохих случаев.Хранение пароля в сеансе также не очень хорошая идея.

Чтобы ответить на ваш вопрос: перезапишите UsernamePasswordAuthenticationFilter и используйте свой пользовательский класс в весенней конфигурации.

Скопируйте содержимое попыткиAuthenticationи добавьте все, что вам нужно для сессии.Было бы очень разумно удалить пароль из сеанса после того, как вы сделали то, что вам нужно

request.getSession().removeAttribute(SPRING_SECURITY_LAST_PASSWORD_KEY);

Класс фильтра:

    public class MyFilter extends UsernamePasswordAuthenticationFilter{
    public static final String SPRING_SECURITY_LAST_PASSWORD_KEY = "SPRING_SECURITY_LAST_PASSWORD";


    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
        if (postOnly && !request.getMethod().equals("POST")) {
            throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
        }

        String username = obtainUsername(request);
        String password = obtainPassword(request);

        if (username == null) {
            username = "";
        }

        if (password == null) {
            password = "";
        }

        username = username.trim();

        UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);

        // Place the last username attempted into HttpSession for views
        HttpSession session = request.getSession(false);

        if (session != null || getAllowSessionCreation()) {
            request.getSession().setAttribute(SPRING_SECURITY_LAST_USERNAME_KEY, TextEscapeUtils.escapeEntities(username));
            request.getSession().setAttribute(SPRING_SECURITY_LAST_PASSWORD_KEY, TextEscapeUtils.escapeEntities(password));
        }

        // Allow subclasses to set the "details" property
        setDetails(request, authRequest);

        return this.getAuthenticationManager().authenticate(authRequest);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...