Rei’s Tech diary

[Spring Boot] JWT Cannot pass null or empty values to constructor 문제 해결하기 본문

프로그래밍/TroubleShooting

[Spring Boot] JWT Cannot pass null or empty values to constructor 문제 해결하기

Reiger 2024. 4. 22. 14:40
문제 설명

클레임에서 권한 정보를 가져올 때, 가져온 사용자 정보와 권한 정보를 UserDetails 객체로 생성할때 Cannot pass null or empty values to constructor 오류가 발생했다.

 //클레임에서 권한 정보 가져오기
Collection<? extends GrantedAuthority> authorities =
        Arrays.stream(claims.get("auth").toString().split(","))
        .map(SimpleGrantedAuthority::new).collect(Collectors.toList());

//문제 발생
UserDetails principal = new User(claims.getSubject(),"",authorities);
return new UsernamePasswordAuthenticationToken(principal,"",authorities);

 

 

해결 방법

 

User 엔티티를 UserDetails로 변환하는 메서드인 createUserDetails에서 User 엔티티의 정보를 사용하려 UserDetails를 생성하고 반환하는데, 이때 누락된 부분이 있어 null로 인식하는 것이었다.

 private UserDetails createUserDetails(User user){
        return User.builder()
                .name(user.getUsername())
                //email 누락
                .email(user.getEmail())
                .password(user.getPassword())
                .roles(user.getRoles())
                .build();
    }

 

 

결론

 

피곤할때 코드짜지 말자.