SAP-Cloud-SDK和SAP cloud-security-xsuaa集成之间的依赖关系冲突

问题描述

我们正尝试将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。