问题描述
我们正尝试将SAP SpringBoot Starter XSUAA 2.7.8(https://github.com/SAP/cloud-security-xsuaa-integration)与SAP CloudSDK for Java 3.32.0一起使用。
CloudSDK依赖于xsuaa(java-api,java-security,tokenclient,java-security-test)版本2.7.8的一部分,但不使用spring-xsuaa。 CloudSDK还依赖于Spring Security 5.4.1。 当我们添加xsuaa-spring-boot-starter时,我们的安全集成测试失败,并且在运行时我们在应用程序的“ rest api”侧(rest控制器)遇到令牌验证错误。似乎是由于xsuaa-spring-boot-starter依赖于Spring Security 5.3.4.RELEASE。
我们收到以下错误消息:java.lang.NoSuchMethodError:'java.util.Map com.nimbusds.jose.Header.toJSONObject()。这是Spring Security 5.4.1(https://github.com/spring-projects/spring-security/issues/9120)的一个已知问题。正如问题所指出的那样,spring security应该与springboot 2.4一起使用,而不是由云sdk使用的2.3。
我们无法解决此问题。这可能是导致不同依赖关系的原因吗?如果是这样,关于如何解决这些问题的任何想法?
谢谢
丹尼
解决方法
编辑:自3.33.0
版开始,SDK在Spring Archetype中默认具有以下配置。
您的观察是正确的,这是由不同的Spring安全版本引入的依赖冲突。
如果您使用的是SDK BOM,则需要先明确设置Spring安全版本,然后再由SDK BOM进行设置:
<dependencyManagement>
<dependencies>
<!-- override spring security from Cloud SDK -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
<version>5.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-resource-server</artifactId>
<version>5.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.sap.cloud.sdk</groupId>
<artifactId>sdk-bom</artifactId>
<version>${sap.cloud.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>com.sap.cloud.security.xsuaa</groupId>
<artifactId>xsuaa-spring-boot-starter</artifactId>
<version>${sap.cloud.security.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
当前,SDK Spring Archetype已更新为默认情况下附带此配置,直到发布Spring Boot 2.4。