개발지식/트러블슈팅

@Authentication UserDetails에 null이 담기는 문제

다오__ 2024. 3. 21. 16:25

원인

게시글 생성 시 `UserDetails` 객체에서 `null` 값이 반환되는 문제로, 이는 스프링 시큐리티 환경에서 인증된 사용자의 상세 정보를 제대로 불러오지 못하는 상황이다.

 


시도

  1. 우선, 스프링 시큐리티가 제공하는 기본 `User` 클래스를 사용해보았지만  여전히 null 값이 반환되었다.
  2. UserDetailsService 인터페이스를 구현하는 커스텀 서비스를 생성해서 loadUserByUsername을 오버라이딩 해서 사용자 정보를 불러오게끔 했지만 여전했다.
  3. UserDetails 인터페이스를 직접 구현하는 방법도 시도했다. 이 방식 역시 `UserDetails` 객체에서 `null`이 반환되는 문제를 해결하지 못했다.

해결

https://devjem.tistory.com/70

 

[프로젝트] @AuthenticationPrincipal에 null값 들어오는 문제 해결

@Authentication을 통한 인증 유저를 가져오는 과정에서 겪은 문제와 제가 해결한 방법에 대해 공유하고자 합니다. @AuthenticationPrincipal 어노테이션의 사용법을 구글에 검색했을때, 많은 블로그에서 Us

devjem.tistory.com

위 블로그 글을 참조하여 실마리를 찾을 수 있었다.

 

나는 JwtTokenFilter에서 Authentication 객체를 만들고 이를 시큐리티 컨텍스트 홀더에 넣는다. 이때 Authentication 객체에 들어가는 princial 부분에 UserDetails를 보관하는 것이 아닌 String 타입의 username을 보관했다.

 

 

따라서 @AuthenticationPrincipal String username 으로 파라미터를 수정해주니 값이 제대로 들어오게 되었다.

 

 

 

@AuthenticationPrincipal에 대한 이해가 부족했기 때문에, 이 어노테이션이 정확히 어떤 값을 가져오는지에 대해 더욱 알게 되었다.

코드를 내부적으로 확인해보는 습관을 가져야 겠다. 코드 내부를 살펴보면 Authentication.getPrincipal을 리턴하는것을 확인할 수 있다. 우선적으로 이것을 확인했다면 금방 해결했을 것이다.