티스토리 뷰
토큰 발급 시, 아래와 같은 오류가 발생했다.
계속해서 오류로 인해 토큰이 발급되지 않았다. 정확한 오류명도 나오지 않았고
그저 signWith 함수에서 DatatypeConverter 오류로 프로그램이 중단된 것을 확인할 수 있다.
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
왜 오류가 발생했을까 ?
사용했던 jjwt 라이브러리 버전은 0.9.1이다.
메이븐레포지토리 사이트에 가서 보아도 0.9.1의 사용량은 다른 버전보다 많다.
즉, 주요 버전이 0.9.1인 것이다.
라이브러리 개발자에 따르면 JDK11을 지원하지 않아 오류가 발생한 것이었다.
스프링부트 3.0부터 최소 JDK버전이 11이다.
해결방법
JDK11 이상 사용하는 경우
jjwt를 0.9.1 을 사용하는 것이 아니라 0.10.0 이상의 버전을 사용하는 것이다.
0.10.0부터 JDK 11을 포함하여 모든 JDK 버전에 대해 지원하고 있다.
JJWT 0.10.0 release note
This is a fairly large feature enhancement release that enables the following:
- Modular project structure resulting in pluggable JJWT dependencies (Issue 348)
- Auto-configuration for Jackson or JSON-Java JSON processors.
- Automatic SignatureAlgorithm selection based on specified signing Key.
- Algorithm and Key Strength Assertions
- Simplified Key generation
- Deterministic Base64(URL) support on all JDK and Android platforms
- Custom JSON processing
- Complete documentation
- and a bunch of other minor fixes and enhancements.
주인장은 jjwt 라이브러리의 버전을 0.11.5로 업데이트했다.
jwwt-impl, jjwt-jackson 라이브러리는 필수이다.
compileOnly 'io.jsonwebtoken:jjwt-api:0.11.5';
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5';
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
참고: https://github.com/jwtk/jjwt/issues/510
댓글