Перенос Spring Boot с 2.3.6.RELEASE на 2.4.0 и json ClassCastException
У меня есть проект Java, который зависит от SpringBoot версии 2.3.6.RELEASE. Однако у меня проблемы с обновлением до версии 2.4.0. В проекте больше ничего не изменилось, только версия SpringBoot. С тех пор приложение выдает следующее сообщение об ошибке:
Caused by: java.lang.ClassCastException: com.nimbusds.jose.shaded.json.JSONObject cannot be cast to net.minidev.json.JSONObject
Я провел некоторое сравнение дерева зависимостей maven (mvn dependency:tree
) и выяснил, что, вероятно, в библиотеки nimbus-jose-jwt и json-smart были внесены существенные изменения.
2.3.6.РЕЛИЗ
[INFO] +- org.springframework.security:spring-security-oauth2-jose:jar:5.3.5.RELEASE:compile
[INFO] | +- com.nimbusds:nimbus-jose-jwt:jar:8.19:compile (version managed from 8.20.1)
[INFO] | | +- com.github.stephenc.jcip:jcip-annotations:jar:1.0-1:compile
[INFO] | | \- net.minidev:json-smart:jar:1.3.1:provided (scope managed from compile)
[INFO] | +- org.springframework.security:spring-security-core:jar:5.3.5.RELEASE:compile
2.4.0
[INFO] +- org.springframework.security:spring-security-oauth2-jose:jar:5.4.1:compile
[INFO] | +- com.nimbusds:nimbus-jose-jwt:jar:9.1.2:compile (version managed from 9.0.1)
[INFO] | | \- com.github.stephenc.jcip:jcip-annotations:jar:1.0-1:compile
[INFO] | +- org.springframework.security:spring-security-core:jar:5.4.1:compile
Как видно выше, nimbus-jose-jwt обновлен с 8.19 до 9.1.2. Более того, json-smart больше не является частью nimbus-jose-jwt в версии 2.4.0.
Основная причина, вероятно, в этом изменении https://connect2id.com/blog/nimbus-jose-jwt-9 Однако что нужно сделать, чтобы предотвратить это исключение?
2 ответа
Вы можете переопределить версии jars nimbus-jose-jwt и json-smart по умолчанию, явно добавив старую версию в свой pom.
Пожалуйста, обратитесь сюда: https://github.com/Azure/azure-sdk-for-java/issues/14898
В моем случае мне пришлось перейти на версию Springboot 2.5.7, а версия nimbus-jose-jwt:jar поставлялась с SB-2.5.7 — 9.10.1.
org.springframework.security:spring-security-oauth2-jose:jar:5.5.3:compile
[INFO] | +- (org.springframework.security:spring-security-core:jar:5.5.3:compile - version managed from 4.2.15.RELEASE; omitted for duplicate)
[INFO] | +- (org.springframework.security:spring-security-oauth2-core:jar:5.5.3:compile - omitted for duplicate)
[INFO] | +- (org.springframework:spring-core:jar:5.3.13:compile - version managed from 5.3.11; omitted for duplicate)
[INFO] | \- com.nimbusds:nimbus-jose-jwt:jar:9.10.1:compile
После понижения версии nimbus-jose-jwt до 8.20 приложение заработало.