-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
@AuthenticationPrincipal 애너테이션이 User 객체만 가져오는 경우...
21.09.19 22:07 작성 조회수 219
0
안녕하세요. 강의 잘 보고 있습니다.
그런데 강의와는 다르게 제 코드에서는 이상하게 동작하는 부분이 있어서 질문 드립니다.
이 강의에서는 컨트롤러에서 @AuthenticationPrincipal 애너테이션을 통해 AccountAdapter 객체를 가져올 수 있었는데요.
제 코드 상에는 loadUserByUsername 메서드에서 AccountAdapter 객체를 반환해도 @AuthenticationPrincipal 애너테이션에서는 해당 클래스의 객체를 가져오지 못합니다. 대신 스프링 시큐리티의 User 클래스로는 잘 받네요.
public ResponseEntity<?> getEvent(Long id, @AuthenticationPrincipal User user) {...} // 이때는 User 객체 잘 가져옴
public ResponseEntity<?> getEvent(Long id, @AuthenticationPrincipal AccountAdapter accountAdapter) {...} // 그런데 이 때는 null 값임
처음에는 UserDetailsService 구현 클래스인 AccountService 클래스를 스프링이 사용하지 않아서 그런건가 싶어서 아래 사항들을 체크했습니다.
- AccountService가 빈으로 등록되었는지 -> 맞게 등록함 (@Service)
- AccountService 에서 loadUserByUsername 메서드가 AccountAdapter 객체를 반환하는지 -> 맞게 반환함
- AccountAdapter가 스프링 시큐리티의 User 클래스를 상속하는지 -> 상속함
- SecurityConfig에서 void config(AuthenticationManagerBuilder auth) 메서드를 오버라이드 해서 UserDetailsService 빈을 추가했는지 -> 추가함
- org.springframework.security.web.bind.annotation.AuthenticationPrincipal 대신 org.springframework.security.core.annotation.AuthenticationPrincipal 애너테이션을 사용했는지 -> 사용함
제가 어떤 부분을 간과해서 문제가 해결이 안되는 걸까요?
전체 소스는 깃허브에 올렸습니다.
답변을 작성해보세요.
답변 1