Spring Security jak wyciągnąć i gdzie przetrzymać userId

0

Cześć,
Piszę apkę microservisową i w kilku miejsach będę potrzebować ID usera do filtrowania itd. Myślę w jaki sposób to zrobić, nie chcę za każdym razem kiedy tego potrzebuje uderzać do bazy, poza tym fajnie jakby servisy były od siebie niezależne. Myślałem o tym żeby zaraz po zalogowaniu Usera zapisać jego ID gdzieś, może w sesji.. tak żeby wszystkie serwisy w każdym momencie mogły wyciągać te ID. Możecie mi coś doradzić jak rozwiązać taki problem i czy dobrze kombinuje?

0

Spring umożliwia właśnie statyczne dobranie się do aktualnie zalogowanego użytkownika:

SecurityContextHolder.getContext().getAuthentication()
0
Pinek napisał(a):

Spring umożliwia właśnie statyczne dobranie się do aktualnie zalogowanego użytkownika:

SecurityContextHolder.getContext().getAuthentication()

Tak, zgadza się, i scenariusz jest taki że wyciągam dzięki temu username, a potem metoda na bazie findUserByUsername, i tak mogę zdobyć id. Jednak zależy mi na tym żeby taką operację wykonać RAZ, a nie za każdym razem wykonywać taki ciąg operacji żeby pobrać to ID.. Zwłaszcza że taką operację dostarcza jeden serwis z wielu, i nie chciałbym żeby wszystkie inne serwisy wołały co chwilę ten jeden. Masz jakiś pomysł jak to zrealizować? Tak aby po zalogowaniu użytkownika pobrać raz jego id, zapisać gdzieś i mieć do tego dostęp cały czas i wszędzie?

0

Proponuję stworzyć springowy component, w którym przechowujesz mapę usernamów na ich idki - przy starcie apki ta mapa będzie pusta, a za każdym razem jak będziesz chciał id usera na podstawie username, to będziesz patrzył w tę mapę -> jeśli wartość będzie nienullowa, to zwracasz dany id, a jeśli null, to będzie znaczyć, że jeszcze nie pobraliśmy tego usera, więc wykonać trza będzie calla do bazy.

0

Poniższe zwraca obiekt który wykorzystałeś przy uwierzytelnianu. Rzutujesz go na klasę na której zaimplementowałeś UserDetails. Ja w tym miejscu zwykle trzymam Id zalogowanego użytkownika.

SecurityContextHolder.getContext().getAuthentication().getPrincipal();
0

Masz jakieś API Gateway czy front ma strzelać bezpośrednio do serwisów? Chcesz sesje współdzielić między mikroserwisami?

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