Po przesłaniu przez nowego użytkownika formularza „Nowe konto” chcę ręcznie zalogować tego użytkownika, aby nie musiał się logować na kolejnej stronie.
Normalna strona logowania do formularza przechodząca przez przechwytywacz zabezpieczenia sprężyny działa dobrze.
W kontrolerze formularza nowego konta tworzę UsernamePasswordAuthenticationToken i ustawiam go ręcznie w SecurityContext:
SecurityContextHolder.getContext().setAuthentication(authentication);
Na tej samej stronie później sprawdzam, czy użytkownik jest zalogowany:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Powoduje to zwrócenie uprawnień, które ustawiłem wcześniej podczas uwierzytelniania. Wszystko dobrze.
Ale kiedy ten sam kod jest wywoływany na następnej ładowanej stronie, token uwierzytelniający jest po prostu UserAnonymous.
Nie jestem pewien, dlaczego nie zachował uwierzytelnienia, które ustawiłem w poprzednim żądaniu. jakieś pomysły?
- Czy może to mieć coś wspólnego z nieprawidłowym skonfigurowaniem identyfikatora sesji?
- Czy jest coś, co prawdopodobnie nadpisuje moje uwierzytelnienie?
- Może potrzebuję tylko kolejnego kroku, aby zapisać uwierzytelnienie?
- A może jest coś, co muszę zrobić, aby w jakiś sposób zadeklarować uwierzytelnianie w całej sesji zamiast pojedynczego żądania?
Szukam tylko myśli, które pomogą mi zobaczyć, co się tutaj dzieje.
SecurityContextHolder.getContext().setAuthentication(authentication)
. To działa i jest powszechne, ale istnieją poważne wady w funkcjonalności, które napotkasz, jeśli to zrobisz. Aby uzyskać więcej informacji, zobacz moje pytanie i odpowiedź: stackoverflow.com/questions/47233187/…