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

Spring Security jak wyciągnąć i gdzie przetrzymać userId
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
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?

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
0

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

Kopiuj
SecurityContextHolder.getContext().getAuthentication()
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
0
Pinek napisał(a):

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

Kopiuj
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?

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
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.

S8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 63
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.

Kopiuj
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
BA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 68
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.