Після того, як новий користувач подає форму "Новий обліковий запис", я хочу вручну ввійти до нього, щоб їм не довелося входити на наступну сторінку.
Сторінка входу в звичайну форму, що проходить через весняний перехоплювач безпеки, працює просто чудово.
У контролері форми нового облікового запису я створюю UsernamePasswordAuthenticationToken і встановлюю його в SecurityContext вручну:
SecurityContextHolder.getContext().setAuthentication(authentication);
На цій же сторінці я пізніше перевіряю, чи користувач увійшов через:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Це повертає повноваження, які я встановив раніше при аутентифікації. Все добре.
Але коли цей самий код викликається на наступній сторінці, яку я завантажую, маркер автентифікації є просто UserAnonymous.
Мені не ясно, чому це не зберегло автентифікацію, яку я встановив у попередньому запиті. Будь-які думки?
- Чи може це стосуватися неправильного встановлення ідентифікатора сеансу?
- Чи є щось, що можливо якось перезаписало мою аутентифікацію?
- Можливо, мені просто потрібен ще один крок, щоб зберегти автентифікацію?
- Або потрібно щось зробити, щоб оголосити автентифікацію протягом усього сеансу, а не один запит якось?
Просто шукаю деякі думки, які можуть допомогти мені побачити, що тут відбувається.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Це працює і є загальним, але є серйозні недоліки функціональності, з якими ви зіткнетесь, якщо просто зробите це. Для отримання додаткової інформації дивіться моє запитання та відповідь: stackoverflow.com/questions/47233187/…