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 jwtjson-smartlibs可能已经做了一些重大更改。

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不再是2.4.0中nimbus-jwt的一部分。

根本原因可能是这种变化https://connect2id.com/blog/nimbus-jose-jwt-9但是,为了防止出现这种异常情况,应该做些什么呢?

您可以通过在pom中显式添加旧版本来覆盖jars nimbus jose jwt和json smart的默认版本。

请参阅此处:https://github.com/Azure/azure-sdk-for-java/issues/14898

在我的情况下,我不得不升级到2.5.7 Springboot版本,而带有SB-2.5.7的nimbus jose jwt:jar版本是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之后,该应用程序开始工作。

最新更新