RuntimeException: 토큰 생성 중 오류가 발생했습니다

채정윤·2025년 5월 13일

Error

목록 보기
6/9

AuthServiceTesttestLogin 메소드 실행 중

java.lang.RuntimeException: 토큰 생성 중 오류가 발생했습니다.라는 예외가 발생

원인 분석:

  1. AuthServicelogin 메소드에서 jwtTokenProvider.createToken(email, roles)를 호출하는 부분에서 NullPointerException
  2. AuthService 클래스를 살펴보면, jwtTokenProvider 필드가 선언되어 있으나, 생성자를 통해 주입받아 초기화하는 코드가 누락
// AuthService.java 일부
    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;
    private JwtTokenProvider jwtTokenProvider; // 초기화 누락

    public AuthService(UserRepository userRepository,
                       PasswordEncoder passwordEncoder) { // JwtTokenProvider 주입 누락
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
        // this.jwtTokenProvider = jwtTokenProvider; // 해당 코드 없음
    }

login 메소드 내에서 jwtTokenProvidernull 상태였고, jwtTokenProvider.createToken(...) 호출 시 NullPointerException이 발생

제공된 해결책:

  • AuthService의 생성자에 JwtTokenProvider를 파라미터로 추가
  • 이를 통해 jwtTokenProvider 필드를 초기화하도록 코드를 수정
  • 또한, 생성자를 통해 주입받는 필드이므로 final 키워드를 jwtTokenProvider 필드에 추가하여 불변성을 확보

수정된 코드 (AuthService.java):

// AuthService.java 일부 수정된 내용
@Service
public class AuthService implements UserDetailsService {

    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;
    private final JwtTokenProvider jwtTokenProvider; // final 추가

    // 생성자에서 JwtTokenProvider 주입받도록 수정
    public AuthService(UserRepository userRepository,
                       PasswordEncoder passwordEncoder,
                       JwtTokenProvider jwtTokenProvider) { // JwtTokenProvider 파라미터 추가
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
        this.jwtTokenProvider = jwtTokenProvider; // jwtTokenProvider 초기화
    }

    // ... (login 메소드 내부는 변경 없음, jwtTokenProvider가 정상적으로 주입되면 문제 해결)
}

0개의 댓글