Trochę zbyt ogólnie zadałeś pytanie, bo temat jest dość szeroki, w zależności od tego co w rzeczywistości chcesz zrealizować. Możesz mieć prostą sytuację, kiedy każdy użytkownik ma dostęp do "swoich danych", może też mieć dostęp do danych organizacji (multitenancy), może mieć dostęp do danych ogranizacji + dodatkowe warunki w zależności od tego kim jest (może przeglądać zdjęcia wszystkich użytkowników, ale dodawać jedynie własne), na to wszystko może się jeszcze nałożyć rola użytkownika (administrator, zwykły użytkownik itd.). Na to wszystko mogą się nałożyć wymagania klienta co do sposobu przechowywania danych i np. zażyczyć sobie szyfrowania danych indywidualnym kluczem.
Nie mniej musisz mieć następujące elementy w całym procesie obsługi requesta:
- uwierzytelnianie (kim jest użytkownik)
- autoryzacja (określenie jakie ma prawa)
- kontrola dostępu do danych (czy to co wiemy o użytkowniku na podstawie powyższych punktów upoważnia go do wykonania operacji, której zażądał)
To w jaki sposób zrealizować te kroki to już kwestia wyboru konkretnej technologii, w zależności od tego jakie są faktyczne wymagania i jaką architekturę całości chcesz mieć. Popularne podejście to użycie tokenów JWT, czyli:
- Frontend pyta użytkownika o podanie login/password
- uderza do jakiegoś serwera po token JWT i dostaje coś na kształt:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
- zapisuje sobie ten token "w pamięci"
- przy kolejnym żądaniu o dostęp do profilu
GET https://acme.com/profile/1234567890
dodaje nagłówek Authorization: Bearer {token}
- serwer dostaje żądanie i sprawdza integralność tokenu (czy nie został zmieniony, czy jest podpisany zaufanym kluczem)
- wyciąga z tokenu sub użytkownika 1234567890
wykonuje kawałek, w tym przypadku prostego kodu:
if(sub != profileId){
throw new UnauthorizedException()
} else {
return repository.getProfile(profileId)
}
Zastrzeżenie - to jest uproszczony flow. Doczytaj o autoryzacji z pomocą JWT, bo handshake zwykle jest bardziej złożony, może być realizowany przez więcej niż 1 serwer, rozdzielać uwierzytelnianie od autoryzacji. Te kroki po stronie serwera można zapakować w Spring Security, w całości bądź w części, pytanie czy warto.