Miejsce dla metod zwracających zalogowanego użytkownika

0

Witam,
Temat trochę mało sensowny, ale nie potrafię wymyślić żadnego rozwiązania, które by mi odpowiadało. Praktycznie w każdej klasie serwisu potrzebuję czasem sprawdzić zalogowanego User'a (np. żeby sprawdzić czy dany zasób do niego należy i czy mogę go zwrócić/edytować). W chwili obecnej po prostu wstrzykuję sobie UserRepo do serwisu i w każdym mam powielone 2 metody:

    private User getLoggedUser() {
		return userRepo.findByUsername(getLoggedUserName());
	}

	private String getLoggedUserName() {
		return SecurityContextHolder.getContext().getAuthentication().getName();
	}

Jest to beznadziejne rozwiązanie ze względu na powielanie kodu. Mógłbym np. pozostawić te metody jedynie w UserService, zmienić je na publiczne i wstrzykiwać ten serwis w każdym innym, ale nie jestem przekonany do tego spoobu. Jak najlepiej to rozwiązać?

0

SecurityContextHolder.getContext().getAuthentication().getPrincipal() zwróci ci eee... principala. Najprawdopodobniej będzie to twój User (w zależności co tam poustawiałeś w security configuration).
Wtedy możesz sobie zrobić takie utilsy, które będziesz wstrzykiwał wszędzie zamiast caaaaałego UserRepo:

public class SecurityService {
    public User getLoggedUserName() {
   	    return (User) SecurityContextHolder.getContext().getPrincipal();
    }
}

Oczywiście powinieneś to odpowiednio oifować zamiast optymistycznie rzucać na Usera

Pytanie po co potrzebujesz użytkownika w każdym serwisie?

0

No tak... ale pisałem, że temat bez sensu. Do zamknięcia / usunięcia.

0

SecurityContextHolder to typowa magiczna kupa. Jak tylko zaczniesz sie bawić wątkami to wyleci w kosmos. Poza tym takie przekazywanie usera przez semi globalną zmienną (ThreadLocal) to jednak rak. IMO lepiej wyciągnąć to jak szybko się da ze/od Springa (np. w kontrolerze) i przekazywać dalej jawnie jako parametr.

0

Zgadzam się z @jarekr000000 - powinieneś wyłuskać to z requestu na poziome controllerów i przekazac jako parametr bo warstwa logiki nie jest od tego typu rzeczy...

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.