일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- WebConfigurerAdapter
- Spring Security
- ㅇㅇㅇㄴㅇ
- HttpSecurity
- 스프링시큐리티
- Session1이 그 모든 클라이언트의 저올
- 스프링 #스프링 시큐리티 #spring security
- ㅂ
- securityconfig
- WebSecurity
- Today
- Total
다오의 개발일지
@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을 리턴하는것을 확인할 수 있다. 우선적으로 이것을 확인했다면 금방 해결했을 것이다.
'개발지식 > 트러블슈팅' 카테고리의 다른 글
스프링 시큐리티 소셜로그인 무한 리디렉션, successHandler 작동이 안되는 문제 (0) | 2024.03.09 |
---|