로그인 시 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 모듈을 추가한 뒤에는 로그인도 잘 되고 토큰도 잘 생성되었다.
'TIL' 카테고리의 다른 글
[TIL][SQL] @Modifying 어노테이션 (0) | 2023.11.08 |
---|---|
[TIL][SQL] 연관 데이터 없을 때 조회하기 (Join vs Left Join) (0) | 2023.11.08 |
JPA 에서 복합키 사용하기 (0) | 2023.08.06 |
[TIL][ContentProject] h2-console 403 error (0) | 2023.07.27 |
[TIL][ContentProject] H2 DB 에서 User Table 사용하기 (0) | 2023.07.19 |