Różnica pomiędzy SecurityContextHolder i Authentication w Spring Security

0

Witam wszystkich ! Jakiś czas pracuję z Spring Security, jestem na tym etapię, gdy umiem konfigurować JWT wraz z Spring Security(logowanie, rejestracje, potwierdzanie przez email i resetowanie hasła).

Tylko że wciąż nie mogę zrozumieć rożnicy pomiędzy SecurityContextHolder i Authentication.

1)Z tego co rozumiem, pierwszy posiada rolę kontenera, gdzie możemy zapisać authenticated użytkownika. Tylko jednego tak?
2)Authentication... W sumie to samo, nie? Zapisujemy w niego użytkownika, którego próbujemy zalogować, więc.... dlaczego nie możemy usunąć SecurityContextHolder i pracować tylko z Authentication?
3)Jak to jest z serwerem, gdy z aplikacji korzysta z 3 osób, Spring Security tworzy dla każdego nowy wątek, dlatego paralelnie mamy kilka context holderów?

Dziękuję bardzo za pomoc.

2

Security context holder korzystam z Thread locala.

1

Authentication to po prostu obiekt z danymi. SecurityContextHolder zajmuje się udostępnianiem tych danych. Domyślnie używa ThreadLocal, ale dokumentacja mówi, że są też inne tryby. Tak więc w obrębie jednego wątku zawsze zwróci ten sam SecurityContext. Z tego co pamiętam to Spring Security to wypełnia przy każdym requescie. Czyli jak user A zrobi zapytanie to w kontekście będzie user A. Jeśli po chwili request zrobi user B do tej samej instancji Springa to Security podmieni Authentication na usera B. Jeśli requesty pójdą na różne wątki to każdy dostanie inny obiekt Authentication.

1 użytkowników online, w tym zalogowanych: 0, gości: 1