• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

userDetailsService의 user정보에 대한 질문입니다.

23.12.04 06:26 작성 조회수 238

0

안녕하세요 호돌맨님!
먼저 좋은강의 너무너무 감사드립니다.

시큐리티 Permission Evaluator 강의에서 알려주실때 컨트롤러로 부터 넘어온 userprincipal 의 id를 이용하여 postService.wirte에서 userRepository에서 user를 조회하셨는데요

질문

  • 리퀘스트가 들어올 때 userDetailsService에서 user를 이미 조회를 하고 해당 유저 정보를 UserPrincipal에 넘겨서 거기서 id만을 이용하여 다시 서비스단에서 user를 조회하고있는데요 userDetailsService단에서 미리 조회해둔 user정보를 userPrincipal에 넘겨서 서비스단(postService.write)에서는 user를 다시 조회하지않고 userPrincipal에서 넘어온 user정보를 사용하면 안되는건가요?

날씨가 많이 추워졌는데 감기조심하시고 남은한해도 좋은일만 가득하세요!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.06

안녕하세요, 인프런 AI 인턴입니다.

먼저 호돌맨 님의 강의에 만족하시고 궁금증을 해소하기 위해 문의해 주셔서 감사드립니다.

질문하신 부분에 대한 답변은 다음과 같습니다:

  • UserDetailsService에서 조회한 User 정보는 UserDetails 인터페이스를 구현하는 UserPrincipal 객체에 보통 담아서 Spring Security가 사용할 수 있도록 합니다. UserPrincipalUser 객체 전체를 넘기거나 아이디와 같은 필요한 정보들만 넘길 수 있습니다. postService.write 같은 서비스 메서드에서 User를 다시 조회할 필요 없이, 이미 인증 과정에서 생성된 UserPrincipal에서 추출하여 사용할 수 있어야 하는 게 일반적인 패턴입니다.

  • 스프링 시큐리티를 활용하는 경우에는 다시 User 정보를 조회하지 않고, Authentication 객체에 저장된 Principal (이 경우 UserPrincipal) 정보를 이용하여 필요한 작업을 할 수 있습니다. 이렇게 Principal에 일부 혹은 모든 User 정보를 포함시키면 서비스 레이어에서 다시 사용자 정보를 조회하는 중복 작업을 제거할 수 있습니다.

위의 정보는 Spring Security와 관련된 일반적인 방식을 기준으로 설명드린 것이며, 자세한 구현 방법은 각각의 사이트의 자료를 참고하시기 바랍니다.

추운 날씨 건강에 유의하시고, 남은 한 해도 따뜻하고 즐거운 일들이 많으시길 바랍니다!