TIL

[TIL][ReservationProject] Jwt 토큰 생성 에러

dbssk 2023. 6. 27. 16:33

로그인 시 Jwt 토큰을 생성하려고 했는데 아래와 같은 에러가 계속 발생했다.

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: io.jsonwebtoken.lang.UnknownClassException: Unable to find an implementation for interface io.jsonwebtoken.io.Serializer using java.util.ServiceLoader. Ensure you include a backing implementation .jar in the classpath, for example jjwt-impl.jar, or your own .jar for custom implementations.] with root cause io.jsonwebtoken.impl.lang.UnavailableImplementationException: Unable to find an implementation for interface io.jsonwebtoken.io.Serializer using java.util.ServiceLoader. Ensure you include a backing implementation .jar in the classpath, for example jjwt-impl.jar, or your own .jar for custom implementations.

그래서 구글링을 해보니 jjwt-api 와 jjwt-impl 의존성만 추가하였었는데 jjwt-jackson 도 추가해야 한다는 것을 알았다.

jjwt-jackson 이 필요한 이유

public static String generateToken(User user) {

        ...

        return builder.compact(); // 토큰 문자열 반환
}

로그를 확인해보면 generateToken() 메서드의 compact() 부분에서 에러가 발생했었다.

jjwt-jackson 모듈은 JWT를 JSON 형식으로 직렬화하고, JSON을 JWT로 역직렬화하기 위한 클래스와 기능을 제공한다. 위 코드에서 compact() 메서드는 JWT를 문자열로 직렬화하는 메서드이므로, jjwt-jackson 모듈이 없으면 해당 기능을 수행할 수 없어 에러가 발생하게 된 것이다. 

jjwt-jackson 모듈을 추가한 뒤에는 로그인도 잘 되고 토큰도 잘 생성되었다.