• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

핸들러 파라미터로 @AuthenticationPrincipal 어노테이션을 설정 했을때 동작 원리에 대한 질문입니다.

20.06.10 23:11 작성 조회수 268

1

안녕하세요. "현재 사용자 조회" 강의 내용 중

핸들러 메소드의 파라미터로 Spring Security가 제공하는 @AuthenticationPrincipal 어노테이션을 사용하여 Principal 객체를 주입받아서 사용하는 부분이 있었습니다.(EventController.class의 핸들러 메소드 파라미터 부분)

Principal 객체란 SecurityContextHolder 안에 담겨 있는 인증된 사용자의 정보이고 기본적으로 username, password, grantType을 가지고 있지만, 

이를  Security 설정 파일에서 설정한 UserDetailsService 구현체의 loadUserByUsername() 메소드를 통해 얻어지는 커스텀한 Principal 객체로써도 사용이 가능하다는 것을 알게되었습니다.

(추가적인 사용자의 정보를 참조할 수 있다는 점에서 User 타입의 단점(?)을 보완할 수 있다고 생각이 듭니다.)

서론이 길었네요.

궁금한 것은 @AuthenticationPrincipal 어노테이션을 사용했을 때...

그리고 SpEL을 사용하여 "anonymousUser"가 아니라면  메소드 파라미터로 Account 타입의 객체를 주입할 수 있었던 이유는

해당 어노테이션이 인증된 사용자 정보가 SecurityContextHolder안에 담겨져 있으면 자동으로 주입해주는 역할을 하며,

현재 애플리케이션에서는 인증 과정과 어댑터 패턴을 통해 AccountAdapter 객체가 Principal로 SecurityContextHolder 안에 담겨져 있을 테고, SpEL을 통해 AccountAdapter의 getAccount() 메소드를 호출 함으로써 주입한다라고 생각하면 될까요?

긴 글 읽어주셔서 감사합니다.

답변 1

답변을 작성해보세요.

1

네 맞습니다.