티스토리 뷰

728x90
반응형

JWT를 이용한 로그인 자체는 쉽게 구현했으나, 로그인 한 정보를 핸들러메서드에서 불러오는 방법을 몰라

 

며칠을 고민했던 기억이 있다.

 

어쨌거나 결국 찾긴 찾았고, 더 좋은 방법을 지금도 틈틈히 찾고 있지만 아직까진 발견할 수가 없다.

 

로그인 구현은 시간이 나면 정리하기로 하고, 웹플럭스에서 사용자 정보를 가져오는 코드는 아래와 같다.

public Mono<User> getCurrentUser() {
	return ReactiveSecurityContextHolder.getContext()
		.map(SecurityContext::getAuthentication)
		.map(Principal::getName)
		.switchIfEmpty(Mono.error(new UserNotFoundException()))
		.flatMap(userRepository::findByEmail);
}

적어놓고 보니 웹플럭스를 사용하지 않을 때와 크게 다르지 않다.

 

시큐리티 컨텍스트 홀더에서 인증정보를, 거기서 이메일 주소를 얻어 사용자를 가져온다.

 

만약 없는 사용자라면(쿼리 결과가 비어있다면) 예외를 던지는 코드도 함께 작성했다.

 

내 경우는 유저 패키지에 서비스 클래스를 만들어서 위와 같은 메서드를 만들어 독립시킨 후,

 

아래와 같이 사용했다.

Mono<User> currentUserMono = userService.getCurrentUser();

Mono<Rating> ratingMono = currentUserMono
		.flatMap(user ->
        // ...

MVC 패턴에서 했던 것처럼 애너테이션으로 처리하고 싶은데, 방법을 잘 몰라서 일단 여기까지만.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함