После того, как новый пользователь отправит форму «Новая учетная запись», я хочу вручную выполнить вход для этого пользователя, чтобы ему не приходилось входить на следующей странице.
Обычная страница входа в систему, проходящая через перехватчик безопасности Spring, работает нормально.
В контроллере формы новой учетной записи я создаю UsernamePasswordAuthenticationToken и вручную устанавливаю его в SecurityContext:
SecurityContextHolder.getContext().setAuthentication(authentication);
На этой же странице я позже проверяю, что пользователь вошел в систему с:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Это возвращает полномочия, которые я установил ранее при аутентификации. Все хорошо.
Но когда этот же код вызывается на следующей странице, которую я загружаю, токен аутентификации будет просто UserAnonymous.
Я не понимаю, почему он не сохранил аутентификацию, которую я установил в предыдущем запросе. Есть предположения?
- Может ли это быть связано с неправильной настройкой идентификатора сеанса?
- Есть ли что-то, что может как-то перезаписать мою аутентификацию?
- Возможно, мне просто нужен еще один шаг, чтобы сохранить аутентификацию?
- Или мне нужно что-то сделать, чтобы как-то объявить аутентификацию для всего сеанса, а не для одного запроса?
Просто ищу некоторые мысли, которые могут помочь мне увидеть, что здесь происходит.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Это работает и является обычным явлением, но есть серьезные функциональные недостатки, с которыми вы столкнетесь, если просто сделаете это. Для получения дополнительной информации см. Мой вопрос и ответ: stackoverflow.com/questions/47233187/…