diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 3a65e0f34f4d..a8286ac7814c 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -1,5 +1,14 @@ # Release History +## 6.2.0-beta.1 (Unreleased) + +### Spring Cloud Azure Autoconfigure +This section includes changes in `spring-cloud-azure-autoconfigure` module. + +#### Bugs Fixed + +- Fix `ClassNotFoundException: com.nimbusds.oauth2.sdk.util.StringUtils` in Active Directory starter. ([#47600](https://github.com/Azure/azure-sdk-for-java/issues/47600)) + ## 6.1.0 (2025-12-16) - This release is compatible with Spring Boot 3.5.0-3.5.8. (Note: 3.5.x (x>8) should be supported, but they aren't tested with this release.) - This release is compatible with Spring Cloud 2025.0.0. (Note: 2025.0.x (x>0) should be supported, but they aren't tested with this release.) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpoints.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpoints.java index ca5c53af3e44..d69733ee3c1f 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpoints.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpoints.java @@ -3,7 +3,7 @@ package com.azure.spring.cloud.autoconfigure.implementation.aad.security.properties; -import com.nimbusds.oauth2.sdk.util.StringUtils; +import org.springframework.util.StringUtils; /** * Used to get endpoints for Microsoft Identity authorization server. @@ -27,7 +27,7 @@ public class AadAuthorizationServerEndpoints { * @param tenantId the tenant ID */ public AadAuthorizationServerEndpoints(String baseUri, String tenantId) { - if (StringUtils.isBlank(baseUri)) { + if (!StringUtils.hasText(baseUri)) { baseUri = DEFAULT_BASE_URI; } this.baseUri = addSlash(baseUri); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpointsTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpointsTests.java new file mode 100644 index 000000000000..08ea74dc0c98 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/aad/security/properties/AadAuthorizationServerEndpointsTests.java @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.implementation.aad.security.properties; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AadAuthorizationServerEndpointsTests { + + private static final String DEFAULT_BASE_URI = "https://login.microsoftonline.com/"; + private static final String CUSTOM_BASE_URI = "https://custom.endpoint.com/"; + private static final String TENANT_ID = "test-tenant-id"; + + @Test + void constructorWithNullBaseUri() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(null, TENANT_ID); + assertEquals(DEFAULT_BASE_URI, endpoints.getBaseUri()); + } + + @Test + void constructorWithEmptyBaseUri() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints("", TENANT_ID); + assertEquals(DEFAULT_BASE_URI, endpoints.getBaseUri()); + } + + @Test + void constructorWithWhitespaceBaseUri() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(" ", TENANT_ID); + assertEquals(DEFAULT_BASE_URI, endpoints.getBaseUri()); + } + + @Test + void constructorWithValidBaseUri() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(CUSTOM_BASE_URI, TENANT_ID); + assertEquals(CUSTOM_BASE_URI, endpoints.getBaseUri()); + } + + @Test + void constructorWithBaseUriWithoutTrailingSlash() { + String baseUriWithoutSlash = "https://custom.endpoint.com"; + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(baseUriWithoutSlash, TENANT_ID); + assertEquals(baseUriWithoutSlash + "/", endpoints.getBaseUri()); + } + + @Test + void getAuthorizationEndpoint() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(DEFAULT_BASE_URI, TENANT_ID); + String authEndpoint = endpoints.getAuthorizationEndpoint(); + assertEquals(DEFAULT_BASE_URI + TENANT_ID + "/oauth2/v2.0/authorize", authEndpoint); + } + + @Test + void getTokenEndpoint() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(DEFAULT_BASE_URI, TENANT_ID); + String tokenEndpoint = endpoints.getTokenEndpoint(); + assertEquals(DEFAULT_BASE_URI + TENANT_ID + "/oauth2/v2.0/token", tokenEndpoint); + } + + @Test + void getJwkSetEndpoint() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(DEFAULT_BASE_URI, TENANT_ID); + String jwkSetEndpoint = endpoints.getJwkSetEndpoint(); + assertEquals(DEFAULT_BASE_URI + TENANT_ID + "/discovery/v2.0/keys", jwkSetEndpoint); + } + + @Test + void getEndSessionEndpoint() { + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints(DEFAULT_BASE_URI, TENANT_ID); + String endSessionEndpoint = endpoints.getEndSessionEndpoint(); + assertEquals(DEFAULT_BASE_URI + TENANT_ID + "/oauth2/v2.0/logout", endSessionEndpoint); + } +}