@Authentication UserDetails에 null이 담기는 문제
원인
게시글 생성 시 `UserDetails` 객체에서 `null` 값이 반환되는 문제로, 이는 스프링 시큐리티 환경에서 인증된 사용자의 상세 정보를 제대로 불러오지 못하는 상황이다.
시도
- 우선, 스프링 시큐리티가 제공하는 기본 `User` 클래스를 사용해보았지만 여전히 null 값이 반환되었다.
- UserDetailsService 인터페이스를 구현하는 커스텀 서비스를 생성해서 loadUserByUsername을 오버라이딩 해서 사용자 정보를 불러오게끔 했지만 여전했다.
- UserDetails 인터페이스를 직접 구현하는 방법도 시도했다. 이 방식 역시 `UserDetails` 객체에서 `null`이 반환되는 문제를 해결하지 못했다.
해결
[프로젝트] @AuthenticationPrincipal에 null값 들어오는 문제 해결
@Authentication을 통한 인증 유저를 가져오는 과정에서 겪은 문제와 제가 해결한 방법에 대해 공유하고자 합니다. @AuthenticationPrincipal 어노테이션의 사용법을 구글에 검색했을때, 많은 블로그에서 Us
devjem.tistory.com
위 블로그 글을 참조하여 실마리를 찾을 수 있었다.
나는 JwtTokenFilter에서 Authentication 객체를 만들고 이를 시큐리티 컨텍스트 홀더에 넣는다. 이때 Authentication 객체에 들어가는 princial 부분에 UserDetails를 보관하는 것이 아닌 String 타입의 username을 보관했다.
따라서 @AuthenticationPrincipal String username 으로 파라미터를 수정해주니 값이 제대로 들어오게 되었다.
@AuthenticationPrincipal에 대한 이해가 부족했기 때문에, 이 어노테이션이 정확히 어떤 값을 가져오는지에 대해 더욱 알게 되었다.
코드를 내부적으로 확인해보는 습관을 가져야 겠다. 코드 내부를 살펴보면 Authentication.getPrincipal을 리턴하는것을 확인할 수 있다. 우선적으로 이것을 확인했다면 금방 해결했을 것이다.