쌓고 쌓다
principalName cannot be empty 에러 본문
principalName cannot be empty 에러가 발생했다.
보통 UserDetails의 구현체를 만들때
getUsername에 null을 반환하면 발생하는 에러라고한다.
principalName에 텍스트가 없으면 발생하는 에러이다.
하지만 다음과 같이 모두 반환값을 만들어 놨다.
public class CustomUserDetails implements UserDetails, OAuth2User {
@Override
public String getUsername() {
return this.loginId;
}
@Override
public String getName() {
return nickname;
}
}
이 에러는 UserDetails를 사용하는 일반 회원 유저에서는 발생하지 않고
OAuth2User를 사용하는 소셜 로그인 회원 유저에서 발생했다.
소셜 로그인의 경우 getUsername()을 사용하지 않는다고 생각하고 다음과 같이 UserDetails, OAuth2User 구현체를 반환했다.
CustomUserDetails details = new CustomUserDetails(member.getId(), "", "", name, "", profileImgPath, user.getAttributes());
CustomUserDetails의 두번째 인자가 loginId로 getUsername 반환값인데
소셜 로그인의 경우 loginId로 로그인하는게 아니라서 빈문자열을 넣어놨다.
이것이 문제가 되는걸까? 생각이들어 getUsername 메소드를 사용할때 출력 로그를 찍어보기로했다.
UserDetails, OAuth2User 구현체 일부
@Override
public String getUsername() {
System.out.println("CustomUserDetails.getUsername");
System.out.println("loginId = " + loginId);
return "test";
}
OAuth2User를 사용하더라도 UserDetails의 getUsername()을 사용한다...!????
그래서 빈문자열을 넣어주면 안되는 것이다.
getUsername에 사용할 username(두번째 인자)를 넘겨줌으로써 해결했다.
CustomUserDetails details = new CustomUserDetails(member.getId(), provider + "_" + providerId, "", name, "", profileImgPath, user.getAttributes());
'프로그래밍 > spring' 카테고리의 다른 글
API, BindingResult, MessageSource를 이용한 에러 메시지 출력 방법 (0) | 2024.07.28 |
---|---|
세션 교체 방법과 회원 정보 수정 (0) | 2024.07.26 |
스프링 시큐리티 OAuth2 loadUser 호출이 안될때 (1) | 2024.07.23 |
SpringSecurity 적용 후 403 에러 발생! CSRF 그게 뭘까? (0) | 2024.06.18 |
체크 예외와 언체크(런타임) 예외 차이 / Throwable? (0) | 2024.05.17 |
Comments