From cb91c1f7aedcfa4ae1d79b006df00a959b502c21 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai <31124698+saragluna@users.noreply.github.com> Date: Mon, 26 Sep 2022 11:16:48 +0800 Subject: [PATCH 01/14] prepare spring cloud azure 4.4.0 release (#31139) --- eng/jacoco-test-coverage/pom.xml | 68 +++++++-------- eng/versioning/version_client.txt | 84 +++++++++---------- .../spring-cloud-azure-dependencies/pom.xml | 2 +- sdk/spring/CHANGELOG.md | 2 +- sdk/spring/README.md | 2 +- .../CHANGELOG.md | 2 +- .../pom.xml | 6 +- .../spring-cloud-azure-actuator/CHANGELOG.md | 2 +- .../spring-cloud-azure-actuator/pom.xml | 2 +- .../CHANGELOG.md | 2 +- .../spring-cloud-azure-autoconfigure/pom.xml | 14 ++-- .../spring-cloud-azure-core/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-core/pom.xml | 2 +- .../pom.xml | 24 +++--- .../CHANGELOG.md | 2 +- .../pom.xml | 4 +- .../spring-cloud-azure-service/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-service/pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../spring-cloud-azure-starter-cosmos/pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 6 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 8 +- .../pom.xml | 4 +- .../pom.xml | 4 +- sdk/spring/spring-cloud-azure-starter/pom.xml | 4 +- .../CHANGELOG.md | 2 +- .../pom.xml | 4 +- .../CHANGELOG.md | 2 +- .../pom.xml | 8 +- .../CHANGELOG.md | 2 +- .../pom.xml | 4 +- .../CHANGELOG.md | 2 +- .../pom.xml | 8 +- .../CHANGELOG.md | 2 +- .../spring-cloud-azure-trace-sleuth/pom.xml | 4 +- .../CHANGELOG.md | 2 +- .../spring-integration-azure-core/pom.xml | 4 +- .../CHANGELOG.md | 2 +- .../pom.xml | 8 +- .../CHANGELOG.md | 2 +- .../pom.xml | 10 +-- .../CHANGELOG.md | 2 +- .../pom.xml | 6 +- .../CHANGELOG.md | 2 +- .../spring-messaging-azure-eventhubs/pom.xml | 6 +- .../CHANGELOG.md | 2 +- .../spring-messaging-azure-servicebus/pom.xml | 6 +- .../CHANGELOG.md | 2 +- .../pom.xml | 6 +- .../spring-messaging-azure/CHANGELOG.md | 2 +- sdk/spring/spring-messaging-azure/pom.xml | 4 +- 66 files changed, 216 insertions(+), 216 deletions(-) diff --git a/eng/jacoco-test-coverage/pom.xml b/eng/jacoco-test-coverage/pom.xml index f2d070c0173c..ac62d208b9f8 100644 --- a/eng/jacoco-test-coverage/pom.xml +++ b/eng/jacoco-test-coverage/pom.xml @@ -465,172 +465,172 @@ com.azure.spring spring-cloud-azure-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-keyvault - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-integration-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-integration-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-integration-storage-queue - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-stream-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-stream-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index e04bed7b77e0..358cc80d9c58 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -174,48 +174,48 @@ com.azure.spring:azure-spring-cloud-appconfiguration-config;2.8.0;2.9.0-beta.1 com.azure.spring:azure-spring-cloud-feature-management-web;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-feature-management;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-appconfiguration-config;2.8.0;2.9.0-beta.1 -com.azure.spring:spring-cloud-azure-dependencies;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-messaging-azure;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-messaging-azure-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-messaging-azure-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-messaging-azure-storage-queue;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-integration-azure-core;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-integration-azure-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-integration-azure-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-integration-azure-storage-queue;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-core;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-actuator-autoconfigure;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-actuator;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-autoconfigure;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-resourcemanager;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-service;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-active-directory;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-active-directory-b2c;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-actuator;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-appconfiguration;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-cosmos;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-data-cosmos;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-keyvault;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-keyvault-certificates;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-keyvault-secrets;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-servicebus-jms;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-storage;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-storage-blob;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-storage-file-share;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-storage-queue;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-integration-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-integration-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-integration-storage-queue;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-stream-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter-stream-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-starter;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-stream-binder-eventhubs-core;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-stream-binder-eventhubs;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-stream-binder-servicebus-core;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-stream-binder-servicebus;4.3.0;4.4.0-beta.1 -com.azure.spring:spring-cloud-azure-trace-sleuth;4.3.0;4.4.0-beta.1 +com.azure.spring:spring-cloud-azure-dependencies;4.3.0;4.4.0 +com.azure.spring:spring-messaging-azure;4.3.0;4.4.0 +com.azure.spring:spring-messaging-azure-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-messaging-azure-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-messaging-azure-storage-queue;4.3.0;4.4.0 +com.azure.spring:spring-integration-azure-core;4.3.0;4.4.0 +com.azure.spring:spring-integration-azure-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-integration-azure-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-integration-azure-storage-queue;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-core;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-actuator-autoconfigure;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-actuator;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-autoconfigure;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-resourcemanager;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-service;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-active-directory;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-active-directory-b2c;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-actuator;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-appconfiguration;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-cosmos;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-data-cosmos;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-keyvault;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-keyvault-certificates;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-keyvault-secrets;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-servicebus-jms;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-storage;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-storage-blob;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-storage-file-share;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-storage-queue;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-integration-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-integration-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-integration-storage-queue;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-stream-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter-stream-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-starter;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-stream-binder-eventhubs-core;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-stream-binder-eventhubs;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-stream-binder-servicebus-core;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-stream-binder-servicebus;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-trace-sleuth;4.3.0;4.4.0 com.azure.spring:spring-cloud-azure-native-configuration;4.0.0-beta.1;4.0.0-beta.2 com.azure.resourcemanager:azure-resourcemanager;2.19.0;2.20.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-appplatform;2.19.0;2.20.0-beta.1 diff --git a/sdk/boms/spring-cloud-azure-dependencies/pom.xml b/sdk/boms/spring-cloud-azure-dependencies/pom.xml index 5192ce636325..67b293a0f599 100644 --- a/sdk/boms/spring-cloud-azure-dependencies/pom.xml +++ b/sdk/boms/spring-cloud-azure-dependencies/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-dependencies - 4.4.0-beta.1 + 4.4.0 pom Spring Cloud Azure Dependencies diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index c3e2368882e0..e7537ffe003f 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) Upgrade Spring Boot dependencies version to 2.7.3 and Spring Cloud dependencies version to 2021.0.3 Upgrade Spring Boot dependencies version to 2.7.2 and Spring Cloud dependencies version to 2021.0.3. diff --git a/sdk/spring/README.md b/sdk/spring/README.md index bda1cbe6f1ad..dc9176647aa8 100644 --- a/sdk/spring/README.md +++ b/sdk/spring/README.md @@ -137,7 +137,7 @@ If you’re a Maven user, add our BOM to your pom.xml `` s com.azure.spring spring-cloud-azure-dependencies - 4.3.0 + 4.4.0 pom import diff --git a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml index b4cc3b8ba1f4..bbf7da1d58d7 100644 --- a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-actuator-autoconfigure - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Actuator AutoConfigure Spring Cloud Azure Starter Actuator AutoConfigure @@ -43,12 +43,12 @@ com.azure.spring spring-cloud-azure-actuator - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-actuator/pom.xml b/sdk/spring/spring-cloud-azure-actuator/pom.xml index dc4f410b337d..2b1ed1a652a4 100644 --- a/sdk/spring/spring-cloud-azure-actuator/pom.xml +++ b/sdk/spring/spring-cloud-azure-actuator/pom.xml @@ -17,7 +17,7 @@ com.azure.spring spring-cloud-azure-actuator - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Actuator https://microsoft.github.io/spring-cloud-azure diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index d6893598b266..45636eba845d 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure AutoConfigure Spring Cloud Azure AutoConfigure @@ -37,20 +37,20 @@ com.azure.spring spring-cloud-azure-service - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0-beta.1 + 4.4.0 true com.azure.spring spring-cloud-azure-trace-sleuth - 4.4.0-beta.1 + 4.4.0 true @@ -59,7 +59,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 true @@ -73,7 +73,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0-beta.1 + 4.4.0 true @@ -81,7 +81,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 true diff --git a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-core/pom.xml b/sdk/spring/spring-cloud-azure-core/pom.xml index b8f3365231ee..4c3346505b9f 100644 --- a/sdk/spring/spring-cloud-azure-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Core https://microsoft.github.io/spring-cloud-azure diff --git a/sdk/spring/spring-cloud-azure-integration-tests/pom.xml b/sdk/spring/spring-cloud-azure-integration-tests/pom.xml index 6442cc760eb6..b2e761382e1c 100644 --- a/sdk/spring/spring-cloud-azure-integration-tests/pom.xml +++ b/sdk/spring/spring-cloud-azure-integration-tests/pom.xml @@ -40,62 +40,62 @@ com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0-beta.1 + 4.4.0 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml b/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml index f75b036d044c..025d86bfccd2 100644 --- a/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml +++ b/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Resource Manager Spring Cloud Azure Resource Manager @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-service/pom.xml b/sdk/spring/spring-cloud-azure-service/pom.xml index ada35c1bb235..65c9b7e8c39a 100644 --- a/sdk/spring/spring-cloud-azure-service/pom.xml +++ b/sdk/spring/spring-cloud-azure-service/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-service - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Service Spring Cloud Azure Service @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml b/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml index c5ed8abaec51..91fdd3b0b0a7 100644 --- a/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-active-directory-b2c - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Active Directory B2C Spring Cloud Azure Starter Active Directory B2C @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 org.springframework.security diff --git a/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml b/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml index f7916f07d22f..a76485baa8cb 100644 --- a/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-active-directory - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Active Directory Spring Cloud Azure Starter Active Directory @@ -86,7 +86,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 org.springframework.security diff --git a/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml b/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml index e86be340c3e9..325921cb3657 100644 --- a/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-actuator - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Actuator Spring Cloud Azure Starter Actuator @@ -88,12 +88,12 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-actuator-autoconfigure - 4.4.0-beta.1 + 4.4.0 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml b/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml index cbe3ba48393c..502b8501be42 100644 --- a/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter App Configuration Spring Cloud Azure Starter App Configuration @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml b/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml index fc0c25815903..e957d9e2719c 100644 --- a/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Cosmos DB Spring Cloud Azure Starter Cosmos DB @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml b/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml index e0a8887c8a81..a16fcf627620 100644 --- a/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Data Cosmos DB Spring Cloud Azure Starter Data Cosmos DB @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml index 4662bed00682..3fe24838357c 100644 --- a/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Event Hubs Spring Cloud Azure Starter Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml index 82a8b58e6549..a67e98198dad 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-integration-eventhubs - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Integration Event Hubs Spring Cloud Azure Starter Integration Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 org.springframework.boot @@ -97,7 +97,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml index df690d804af7..568596beb86b 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-integration-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Integration Service Bus Spring Cloud Azure Starter Integration Service Bus @@ -89,7 +89,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 org.springframework.boot @@ -99,7 +99,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml index 21484fa0d7c7..8001d2932c8d 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml @@ -10,7 +10,7 @@ com.azure.spring spring-cloud-azure-starter-integration-storage-queue - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Integration Storage Queue Spring Cloud Azure Starter Integration Storage Queue @@ -92,7 +92,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 org.springframework.boot @@ -102,7 +102,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml index f8e1cb06c63c..19508a4c4b36 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Key Vault Certificates Spring Cloud Azure Starter Key Vault Certificates @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml index 55de40b9386e..83e821ec6515 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Key Vault Secrets Spring Cloud Azure Starter Key Vault Secrets @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml index 6ba7163b3e51..842e43c4ece6 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Key Vault Spring Cloud Azure Starter Key Vault @@ -88,12 +88,12 @@ com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml index bfc42795c1a9..ca27d94ad19e 100644 --- a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Service Bus JMS Spring Cloud Azure Starter Service Bus JMS @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml index 4499f2c45cc9..27fd2c6776f3 100644 --- a/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Service Bus Spring Cloud Azure Starter Service Bus @@ -89,7 +89,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml index c2cf8f201d84..dadce704c74d 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Storage Blob Spring Cloud Azure Starter Storage Blob @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml index 56ddff25a6ca..9955e99d4b94 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Storage File Share Spring Cloud Azure Starter Storage File Share @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml index 644e3fde396d..73f021533125 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml @@ -10,7 +10,7 @@ com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Storage Queue Spring Cloud Azure Starter Storage Queue @@ -92,7 +92,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-storage/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage/pom.xml index aa2af7ce0b10..5f17d784988c 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Storage Spring Cloud Azure Starter Storage @@ -88,19 +88,19 @@ com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml index 57c4cce29feb..2fb68a16f8dd 100644 --- a/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-stream-eventhubs - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Stream Event Hubs Spring Cloud Azure Starter Stream Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml index e7cd05333c36..087cbdd163ed 100644 --- a/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-stream-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Stream Service Bus Spring Cloud Azure Starter Stream Service Bus @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-starter/pom.xml b/sdk/spring/spring-cloud-azure-starter/pom.xml index 9ed6f3ad5185..6ecf024a9544 100644 --- a/sdk/spring/spring-cloud-azure-starter/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Starter Core starter, including auto-configuration support @@ -93,7 +93,7 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml index d44b2469646e..8786d639d0ac 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Stream Binder Event Hubs Core Spring Cloud Azure Stream Binder Event Hubs Core @@ -49,7 +49,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml index 84a238ce5732..1202ae940a8a 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Stream Binder Event Hubs Spring Cloud Azure Stream Binder Event Hubs @@ -37,12 +37,12 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0-beta.1 + 4.4.0 @@ -60,7 +60,7 @@ com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml index 92deac1f2ac0..00784cb28435 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Stream Binder Service Bus Core Spring Cloud Azure Stream Binder Service Bus Core @@ -43,7 +43,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml index b9de8ccab83b..b18567a05de3 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Stream Binder Service Bus Spring Cloud Azure Stream Binder Service Bus @@ -37,17 +37,17 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0-beta.1 + 4.4.0 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml b/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml index d336c95435f5..67728ff86565 100644 --- a/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml +++ b/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-trace-sleuth - 4.4.0-beta.1 + 4.4.0 Spring Cloud Azure Trace on Sleuth https://microsoft.github.io/spring-cloud-azure @@ -36,7 +36,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0-beta.1 + 4.4.0 org.springframework.cloud diff --git a/sdk/spring/spring-integration-azure-core/CHANGELOG.md b/sdk/spring/spring-integration-azure-core/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-integration-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-core/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-core/pom.xml b/sdk/spring/spring-integration-azure-core/pom.xml index d81d8f0ee982..a263ff5a9eb5 100644 --- a/sdk/spring/spring-integration-azure-core/pom.xml +++ b/sdk/spring/spring-integration-azure-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 Spring Integration Azure Core Spring Integration Azure Core @@ -37,7 +37,7 @@ com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 org.springframework.integration diff --git a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-eventhubs/pom.xml b/sdk/spring/spring-integration-azure-eventhubs/pom.xml index d62455144677..48a1e7a0a114 100644 --- a/sdk/spring/spring-integration-azure-eventhubs/pom.xml +++ b/sdk/spring/spring-integration-azure-eventhubs/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 Spring Integration Azure Event Hubs Spring Integration Azure Event Hubs @@ -37,19 +37,19 @@ com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 test-jar test com.azure.spring spring-messaging-azure-eventhubs - 4.4.0-beta.1 + 4.4.0 diff --git a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-servicebus/pom.xml b/sdk/spring/spring-integration-azure-servicebus/pom.xml index 95ed329bed51..5afc1b76bc02 100644 --- a/sdk/spring/spring-integration-azure-servicebus/pom.xml +++ b/sdk/spring/spring-integration-azure-servicebus/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Integration Azure Service Bus Spring Integration Azure Service Bus @@ -37,24 +37,24 @@ com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 test-jar test com.azure.spring spring-messaging-azure-servicebus - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure-servicebus - 4.4.0-beta.1 + 4.4.0 test-jar test diff --git a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-storage-queue/pom.xml b/sdk/spring/spring-integration-azure-storage-queue/pom.xml index 772c31f055e2..1dc90dfa4e61 100644 --- a/sdk/spring/spring-integration-azure-storage-queue/pom.xml +++ b/sdk/spring/spring-integration-azure-storage-queue/pom.xml @@ -13,7 +13,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 Spring Integration Azure Storage Queue Spring Integration Azure Storage Queue @@ -38,12 +38,12 @@ com.azure.spring spring-integration-azure-core - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 + 4.4.0 Spring Messaging Azure Event Hubs Spring Messaging Azure Event Hubs @@ -37,12 +37,12 @@ com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 test-jar test diff --git a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure-servicebus/pom.xml b/sdk/spring/spring-messaging-azure-servicebus/pom.xml index f22ab058011c..8881ebc5c8b7 100644 --- a/sdk/spring/spring-messaging-azure-servicebus/pom.xml +++ b/sdk/spring/spring-messaging-azure-servicebus/pom.xml @@ -13,7 +13,7 @@ com.azure.spring spring-messaging-azure-servicebus - 4.4.0-beta.1 + 4.4.0 Spring Messaging Azure Service Bus Spring Messaging Azure Service Bus @@ -38,12 +38,12 @@ com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 test-jar test diff --git a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md index 7699de55fb44..37d79fdc0d37 100644 --- a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure-storage-queue/pom.xml b/sdk/spring/spring-messaging-azure-storage-queue/pom.xml index d484ffa3a16d..6f227de109ce 100644 --- a/sdk/spring/spring-messaging-azure-storage-queue/pom.xml +++ b/sdk/spring/spring-messaging-azure-storage-queue/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-messaging-azure-storage-queue - 4.4.0-beta.1 + 4.4.0 Spring Messaging Azure Storage Queue Spring Messaging Azure Storage Queue @@ -37,12 +37,12 @@ com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 test-jar test diff --git a/sdk/spring/spring-messaging-azure/CHANGELOG.md b/sdk/spring/spring-messaging-azure/CHANGELOG.md index 39cab5c4c2e7..34b0b3b90621 100644 --- a/sdk/spring/spring-messaging-azure/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.0-beta.1 (Unreleased) +## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure/pom.xml b/sdk/spring/spring-messaging-azure/pom.xml index 732f3854cc44..a6463e0e1626 100644 --- a/sdk/spring/spring-messaging-azure/pom.xml +++ b/sdk/spring/spring-messaging-azure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-messaging-azure - 4.4.0-beta.1 + 4.4.0 Spring Messaging Azure Spring Messaging Azure @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-service - 4.4.0-beta.1 + 4.4.0 org.springframework From 9348fc49e254a589cfd82f147e946ba3d1ecd54c Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 24 Oct 2022 17:16:51 +0800 Subject: [PATCH 02/14] Fix bugs caused by supporting azure ad proxy (#31665) --- .vscode/cspell.json | 7 + .../src/main/resources/revapi/revapi.json | 5 + sdk/spring/CHANGELOG.md | 55 ++-- .../AadOAuth2ClientConfiguration.java | 93 ++++--- .../AadResourceServerConfiguration.java | 7 +- .../AadRestTemplateCreator.java | 24 +- ...tTemplateProxyCustomizerConfiguration.java | 31 +++ .../jackson/SerializerUtils.java | 18 +- ...zationCodeGrantRequestEntityConverter.java | 31 +-- ...ssionOAuth2AuthorizedClientRepository.java | 22 +- .../webapp/AadOidcIdTokenDecoderFactory.java | 42 +++ .../aadb2c/AadB2cAutoConfiguration.java | 37 ++- .../aadb2c/AadB2cOidcLoginConfigurer.java | 47 +++- .../AadB2cOidcIdTokenDecoderFactory.java | 50 ++++ ...bstractAzureServiceConfigurationTests.java | 88 +++---- .../aad/RestTemplateTestUtil.java | 134 ++++++++++ .../AadRestTemplateCreatorTest.java | 120 +++++---- .../AadOAuth2ClientConfigurationTests.java | 60 +++-- ...nOAuth2AuthorizedClientRepositoryTest.java | 240 ++++++++++++++++++ ...nCodeGrantRequestEntityConverterTests.java | 76 +++--- .../AadB2cAutoConfigurationTests.java | 39 ++- .../useragent/CosmosUserAgentTests.java | 36 +-- .../amqp/EventHubsUserAgentTests.java | 6 +- .../amqp/EventProcessorUserAgentTests.java | 6 +- .../amqp/ServiceBusUserAgentTests.java | 4 +- .../ServiceBusProcessorUserAgentTests.java | 6 +- .../ServiceBusReceiverUserAgentTests.java | 6 +- .../ServiceBusSenderUserAgentTests.java | 6 +- ...viceBusSessionProcessorUserAgentTests.java | 6 +- ...rviceBusSessionReceiverUserAgentTests.java | 6 +- .../useragent/util/UserAgentTestUtil.java | 14 +- .../resources/aad/access-token-response.json | 9 + 32 files changed, 1007 insertions(+), 324 deletions(-) create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOidcIdTokenDecoderFactory.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cOidcIdTokenDecoderFactory.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/RestTemplateTestUtil.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepositoryTest.java create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 55091e4d38fc..48b9b2bd65f6 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -248,6 +248,13 @@ "compilerArguments", "annotationProcessors" ] + }, + { + "filename": "sdk/spring/CHANGELOG.md", + "words": [ + "AADB", + "JPMS" + ] } ], "allowCompoundWords": false diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json index 237888c5c8a6..c6d782def152 100644 --- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json +++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json @@ -501,6 +501,11 @@ "code": "java.method.numberOfParametersChanged", "new": "method void com.azure.spring.cloud.autoconfigure.aadb2c.configuration.AadB2cOAuth2ClientConfiguration::(com.azure.spring.cloud.autoconfigure.aadb2c.properties.AadB2cProperties, org.springframework.boot.web.client.RestTemplateBuilder)", "justification": "Bean configuration will not be used by customer in java code." + }, + { + "code": "java.method.numberOfParametersChanged", + "new": "method void com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cAutoConfiguration::(org.springframework.boot.web.client.RestTemplateBuilder)", + "justification": "Bean configuration will not be used by customer in java code." } ] } diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index e7537ffe003f..9bb2895aa2b3 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -1,5 +1,16 @@ # Release History +## 4.4.1 (Unreleased) + +#### Bugs Fixed +- Fix bug: Put a value into Collections.emptyMap(). [#31190](https://github.com/Azure/azure-sdk-for-java/issues/31190). +- Fix bug: RestTemplate used to get access token should only contain 2 converters. [#31482](https://github.com/Azure/azure-sdk-for-java/issues/31482). +- Fix bug: RestOperations is not well configured when jwkResolver is null. [#31218](https://github.com/Azure/azure-sdk-for-java/issues/31218). +- Fix bug: Duplicated "scope" parameter. [#31191](https://github.com/Azure/azure-sdk-for-java/issues/31191). +- Fix bug: NimbusJwtDecoder still uses `RestTemplate()` instead `RestTemplateBuilder` [#31233](https://github.com/Azure/azure-sdk-for-java/issues/31233) +- Fix bug: Proxy setting not work in Azure AD B2C web application [31593](https://github.com/Azure/azure-sdk-for-java/issues/31593) + + ## 4.4.0 (2022-09-26) Upgrade Spring Boot dependencies version to 2.7.3 and Spring Cloud dependencies version to 2021.0.3 Upgrade Spring Boot dependencies version to 2.7.2 and Spring Cloud dependencies version to 2021.0.3. @@ -29,8 +40,6 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. - Fix the Service Bus Binder cannot automatically create Topic/Subscriptions from consumer bug. [#30722](https://github.com/Azure/azure-sdk-for-java/pull/30722). - Fix the cloud type cannot be configured for Service Bus Binder bug [#30936](https://github.com/Azure/azure-sdk-for-java/issues/30936). - - ## 4.3.0 (2022-06-29) - This release is compatible with Spring Boot 2.5.0-2.5.14, 2.6.0-2.6.9, 2.7.0-2.7.1. (Note: 2.5.x (x>14), 2.6.y (y>9) and 2.7.z (z>1) should be supported, but they aren't tested with this release.) - This release is compatible with Spring Cloud 2020.0.3-2020.0.5, 2021.0.0-2021.0.3. (Note: 2020.0.x (x>5) and 2021.0.y (y>3) should be supported, but they aren't tested with this release.) @@ -127,7 +136,7 @@ This section includes changes in `spring-integration-azure-storage-queue` module - Upgrade Spring Boot to 2.6.6 to address [CVE-2022-22965](https://github.com/advisories/GHSA-36p3-wjmg-h94x) [#28280](https://github.com/Azure/azure-sdk-for-java/pull/28280). ### Features Added -- GA the `spring-cloud-azure-starter-keyvault-certificates`. This starter supports the auto-configuration of Azure Key Vault `CertificateClient` and `CertificateAsyncClient`. +- GA the `spring-cloud-azure-starter-keyvault-certificates`. This starter supports the auto-configuration of Azure Key Vault `CertificateClient` and `CertificateAsyncClient`. ### Spring Cloud Azure Dependencies (BOM) #### Dependency Updates @@ -150,8 +159,8 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. ### Dependency Updates - Upgrade dependency according to spring-boot-dependencies:2.6.3 and spring-cloud-dependencies:2021.0.0. -### Features Added -- Add `Automatic-Module-Name` for all Spring Cloud Azure modules and change the root pacakge names to match the module names [#27350](https://github.com/Azure/azure-sdk-for-java/issues/27350), [#27420](https://github.com/Azure/azure-sdk-for-java/pull/27420). +### Features Added +- Add `Automatic-Module-Name` for all Spring Cloud Azure modules and change the root package names to match the module names [#27350](https://github.com/Azure/azure-sdk-for-java/issues/27350), [#27420](https://github.com/Azure/azure-sdk-for-java/pull/27420). ### Spring Cloud Azure Dependencies (BOM) #### Dependency Updates @@ -192,8 +201,8 @@ This section includes changes in `spring-cloud-azure-starter-active-directory` m + Delete `AadJwtAudienceValidator` and use `JwtClaimValidator` instead. + Rename `AadTokenClaim` to `AadJwtClaimNames`. -#### Features Added -- Support constructing `AadOAuth2AuthorizationRequestResolver` with `authorizationRequestBaseUri` [#26494](https://github.com/Azure/azure-sdk-for-java/issues/26494). +#### Features Added +- Support constructing `AadOAuth2AuthorizationRequestResolver` with `authorizationRequestBaseUri` [#26494](https://github.com/Azure/azure-sdk-for-java/issues/26494). - Make `AadWebSecurityConfigurerAdapter` more configurable [#27802](https://github.com/Azure/azure-sdk-for-java/pull/27802). #### Dependency Updates @@ -206,21 +215,21 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. - Refactor retry options [#27332](https://github.com/Azure/azure-sdk-for-java/pull/27332), [#27586](https://github.com/Azure/azure-sdk-for-java/pull/27586). + Delete properties `spring.cloud.azure.retry.timeout` and `spring.cloud.azure..retry.timeout`. + Add properties `spring.cloud.azure.retry.amqp.try-timeout` and `spring.cloud.azure..retry.try-timeout` instead. (`` means this option only applies to AMQP-based service clients). - + Delete properties `spring.cloud.azure.retry.back-off.max-attempts`, `spring.cloud.azure.retry.back-off.delay`, `spring.cloud.azure.retry.back-off.max-delay`, and `spring.cloud.azure.retry.backoff.multiplier`. - + Delete properties `spring.cloud.azure..retry.back-off.max-attempts`, `spring.cloud.azure..retry.back-off.delay`, `spring.cloud.azure..retry.back-off..max-delay`, and `spring.cloud.azure..retry.backoff.multiplier`. + + Delete properties `spring.cloud.azure.retry.back-off.max-attempts`, `spring.cloud.azure.retry.back-off.delay`, `spring.cloud.azure.retry.back-off.max-delay`, and `spring.cloud.azure.retry.backoff.multiplier`. + + Delete properties `spring.cloud.azure..retry.back-off.max-attempts`, `spring.cloud.azure..retry.back-off.delay`, `spring.cloud.azure..retry.back-off..max-delay`, and `spring.cloud.azure..retry.backoff.multiplier`. + Add properties `spring.cloud.azure.retry.mode`, `spring.cloud.azure..retry.mode`, `spring.cloud.azure.retry.exponential.*`, `spring.cloud.azure..retry.exponential.*`, `spring.cloud.azure.retry.fixed*`, and `spring.cloud.azure..retry.fixed.*` instead: - `spring.cloud.azure.retry.exponential.base-delay`. - `spring.cloud.azure.retry.exponential.max-delay`. - `spring.cloud.azure.retry.exponential.max-retries`. - `spring.cloud.azure.retry.fixed.delay`. - `spring.cloud.azure.retry.fixed.max-retries`. -- Refactor proxy options [#27402](https://github.com/Azure/azure-sdk-for-java/pull/27402): +- Refactor proxy options [#27402](https://github.com/Azure/azure-sdk-for-java/pull/27402): + Change `spring.cloud.azure..proxy.authentication-type` to `spring.cloud.azure..proxy.authentication-type`. (`` means this property only applies to AMQP-based service clients). + Delete `spring.cloud.azure.proxy.authentication-type` and add `spring.cloud.azure.proxy.amqp.authentication-type` instead. -- Refactor client options [#27402](https://github.com/Azure/azure-sdk-for-java/pull/27511): +- Refactor client options [#27402](https://github.com/Azure/azure-sdk-for-java/pull/27511): + Change `spring.cloud.azure..client.headers` to `spring.cloud.azure..client.headers`. (`` means this property only applies to HTTP-based service clients). + Delete `spring.cloud.azure.client.headers` and add `spring.cloud.azure.client.http.headers` instead. -- Rename properties `spring.cloud.azure.profile.cloud` and `spring.cloud.azure..cloud` to `spring.cloud.azure.profile.cloud-type` and `spring.cloud.azure..cloud-type` [#27258](https://github.com/Azure/azure-sdk-for-java/pull/27258). +- Rename properties `spring.cloud.azure.profile.cloud` and `spring.cloud.azure..cloud` to `spring.cloud.azure.profile.cloud-type` and `spring.cloud.azure..cloud-type` [#27258](https://github.com/Azure/azure-sdk-for-java/pull/27258). - Delete properties `spring.cloud.azure.credential.managed-identity-client-id` and `spring.cloud.azure..credential.managed-identity-client-id`. Add `spring.cloud.azure.credential.managed-identity-enabled` and `spring.cloud.azure..credential.managed-identity-enabled` instead [#27118](https://github.com/Azure/azure-sdk-for-java/pull/27118), [#27258](https://github.com/Azure/azure-sdk-for-java/pull/27258). - Change type of JWK/JWT time duration properties from `int/long` to `Duration` [#27579](https://github.com/Azure/azure-sdk-for-java/pull/27579): + `spring.cloud.azure.active-directory.jwt-connect-timeout` and `spring.cloud.azure.active-directory.b2c.jwt-connect-timeout`. @@ -253,18 +262,18 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. - Delete `EventHubsInitializationContextConsumer`, `EventHubsCloseContextConsumer`, `EventHubsErrorContextConsumer` and `ServiceBusErrorContextConsumer`. Please use `Consumer<>` directly if you want to configure them [#27288](https://github.com/Azure/azure-sdk-for-java/pull/27288). - Delete the bean of `EventHubsProcessorContainer` in the autoconfiguration for Event Hubs Spring Messaging support. When needed, a user-defined `EventHubsMessageListenerContainer` bean should be provided for the replacement [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216). - Delete the bean of `ServiceBusProcessorContainer` in the autoconfiguration for Service Bus Spring Messaging support. When needed, a user-defined `ServiceBusMessageListenerContainer` bean should be provided for the replacement [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216). -- Rename Beans in `AadAuthenticationFilterAutoConfiguration` from `azureADJwtTokenFilter\getJWTResourceRetriever\getJWKSetCache` to `aadAuthenticationFilter\jwtResourceRetriever\jwkSetCache` [#27301](https://github.com/Azure/azure-sdk-for-java/pull/27301). -- Rename Bean in `AadB2cResourceServerAutoConfiguration` from `aadIssuerJWSKeySelector` to `aadIssuerJwsKeySelector` [#27301](https://github.com/Azure/azure-sdk-for-java/pull/27301). +- Rename Beans in `AadAuthenticationFilterAutoConfiguration` from `azureADJwtTokenFilter\getJWTResourceRetriever\getJWKSetCache` to `aadAuthenticationFilter\jwtResourceRetriever\jwkSetCache` [#27301](https://github.com/Azure/azure-sdk-for-java/pull/27301). +- Rename Bean in `AadB2cResourceServerAutoConfiguration` from `aadIssuerJWSKeySelector` to `aadIssuerJwsKeySelector` [#27301](https://github.com/Azure/azure-sdk-for-java/pull/27301). - Change non-SDK defined boolean configuration properties from `Boolean` to `boolean` [#27321](https://github.com/Azure/azure-sdk-for-java/pull/27321). - Delete unused API from `KeyVaultOperation` and `KeyVaultPropertySource` [#27722](https://github.com/Azure/azure-sdk-for-java/pull/27722). - Delete `Propagator` from the constructor of `SleuthHttpPolicy` [#27621](https://github.com/Azure/azure-sdk-for-java/pull/27621). -- Move classes for internal usage to the implementation pacakge [#27113](https://github.com/Azure/azure-sdk-for-java/issues/27113). +- Move classes for internal usage to the implementation package [#27113](https://github.com/Azure/azure-sdk-for-java/issues/27113). #### Features Added - Add a compatibility verifier for Spring Cloud Azure [#25437](https://github.com/Azure/azure-sdk-for-java/issues/25437). - Support configuring an `AzureTokenCredentialResolver` for each `*ClientBuilderFactory` [#26792](https://github.com/Azure/azure-sdk-for-java/pull/26792). - Add more hints for configuration properties in `additional-spring-configuration-metadata.json` file [#26600](https://github.com/Azure/azure-sdk-for-java/issues/26600). -- Add descriptions and logs for `namespacce` property of Service Bus and Event Hubs [#27053](https://github.com/Azure/azure-sdk-for-java/issues/27053). +- Add descriptions and logs for `namespace` property of Service Bus and Event Hubs [#27053](https://github.com/Azure/azure-sdk-for-java/issues/27053). #### Bugs Fixed - Fix AAD autoconfiguration activated when no web dependencies on the classpath [#26915](https://github.com/Azure/azure-sdk-for-java/issues/26915). @@ -329,7 +338,7 @@ This section includes changes in `spring-cloud-azure-stream-binder-servicebus` m This section includes changes in the `spring-integration-azure-eventhubs` module. #### Breaking Changes -- Move classes for internal usage to the implementation pacakge [#27281](https://github.com/Azure/azure-sdk-for-java/pull/27281). +- Move classes for internal usage to the implementation package [#27281](https://github.com/Azure/azure-sdk-for-java/pull/27281). - Change the message header prefix from `azure_eventhub` to `azure_eventhubs_` [#27746](https://github.com/Azure/azure-sdk-for-java/pull/27746). - Refactor the constructors of `EventHubsInboundChannelAdapter` to `EventHubsInboundChannelAdapter(EventHubsMessageListenerContainer)` and `EventHubsInboundChannelAdapter(EventHubsMessageListenerContainer, ListenerMode)` [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216), [#27421](https://github.com/Azure/azure-sdk-for-java/pull/27421). @@ -337,7 +346,7 @@ This section includes changes in the `spring-integration-azure-eventhubs` module This section includes changes in the `spring-integration-azure-servicebus` module. #### Breaking Changes -- Move classes for internal usage to the implementation pacakge [#27281](https://github.com/Azure/azure-sdk-for-java/pull/27281). +- Move classes for internal usage to the implementation package [#27281](https://github.com/Azure/azure-sdk-for-java/pull/27281). - Delete message header of `AzureHeaders.RAW_ID`. Please use `ServiceBusMessageHeaders.MESSAGE_ID` instead [#27675](https://github.com/Azure/azure-sdk-for-java/pull/27675). - Delete class `CheckpointConfig`. Please use `ServiceBusContainerProperties#setAutoComplete` instead. To disable the auto-complete mode is equivalent to `MANUAL` checkpoint mode and to enable it will trigger the `RECORD` mode [#27615](https://github.com/Azure/azure-sdk-for-java/pull/27615), [#27646](https://github.com/Azure/azure-sdk-for-java/pull/27646). @@ -374,18 +383,18 @@ This section includes changes in the `spring-messaging-azure` module. This section includes changes in the `spring-messaging-azure-eventhubs` module. #### Breaking Changes -- Move classes for internal usage to the implementation pacakge [#27396](https://github.com/Azure/azure-sdk-for-java/pull/27396). +- Move classes for internal usage to the implementation package [#27396](https://github.com/Azure/azure-sdk-for-java/pull/27396). - Move class `PartitionSupplier` from package `com.azure.spring.messaging` to `com.azure.spring.messaging.eventhubs.core` [#27422](https://github.com/Azure/azure-sdk-for-java/issues/27422). - Delete parameter of `PartitionSupplier` from the sending API for a single message in `EventHubsTemplate` [#27422](https://github.com/Azure/azure-sdk-for-java/pull/27422). Please use message headers of `com.azure.spring.messaging.AzureHeaders.PARTITION_ID` and `com.azure.spring.messaging.AzureHeaders.PARTITION_KEY` instead [#27422](https://github.com/Azure/azure-sdk-for-java/issues/27422). - Change the message header prefix from `azure_eventhub` to `azure_eventhubs_` [#27746](https://github.com/Azure/azure-sdk-for-java/pull/27746). -- Refactor the `EventHubsMessageListenerContainer` [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216), [#27543](https://github.com/Azure/azure-sdk-for-java/pull/27543): +- Refactor the `EventHubsMessageListenerContainer` [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216), [#27543](https://github.com/Azure/azure-sdk-for-java/pull/27543): + Change `EventHubsProcessorContainer` to `EventHubsMessageListenerContainer`. + Add class `EventHubsContainerProperties` for constructing a `EventHubsMessageListenerContainer`. + Add `EventHubsErrorHandler` for `EventHubsMessageListenerContainer`. + Rename `BatchEventProcessingListener` and `RecordEventProcessingListener` to `EventHubsBatchMessageListener` and `EventHubsRecordMessageListener`. #### Features Added -- Support adding builder custoimzers in `DefaultEventHubsNamespaceProducerFactory` and `DefaultEventHubsNamespaceProcessorFactory` [#27452](https://github.com/Azure/azure-sdk-for-java/pull/27452). +- Support adding builder customizers in `DefaultEventHubsNamespaceProducerFactory` and `DefaultEventHubsNamespaceProcessorFactory` [#27452](https://github.com/Azure/azure-sdk-for-java/pull/27452). ### Spring Messaging Azure Service Bus This section includes changes in the `spring-messaging-azure-servicebus` module. @@ -394,7 +403,7 @@ This section includes changes in the `spring-messaging-azure-servicebus` module. - Delete parameter of `PartitionSupplier` from the sending API for a single message in `ServiceBusTemplate` [#27349](https://github.com/Azure/azure-sdk-for-java/issues/27349). Please use message header of `com.azure.spring.messaging.AzureHeaders.PARTITION_KEY` instead [#27422](https://github.com/Azure/azure-sdk-for-java/issues/27422). - Delete message header of `AzureHeaders.RAW_ID`. Please use `ServiceBusMessageHeaders.MESSAGE_ID` instead [#27675](https://github.com/Azure/azure-sdk-for-java/pull/27675), [#27820](https://github.com/Azure/azure-sdk-for-java/pull/27820). -- Refactor the `ServiceBusMessageListenerContainer` [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216), [#27543](https://github.com/Azure/azure-sdk-for-java/pull/27543): +- Refactor the `ServiceBusMessageListenerContainer` [#27216](https://github.com/Azure/azure-sdk-for-java/pull/27216), [#27543](https://github.com/Azure/azure-sdk-for-java/pull/27543): + Change `ServiceBusProcessorContainer` to `ServiceBusMessageListenerContainer`. + Add class `ServiceBusContainerProperties` for constructing a `ServiceBusMessageListenerContainer`. + Add `ServiceBusErrorHandler` for `ServiceBusMessageListenerContainer`. @@ -418,7 +427,7 @@ Please use message header of `com.azure.spring.messaging.AzureHeaders.PARTITION_ * ServiceBusMessageHeaders.STATE * ServiceBusMessageHeaders.SUBJECT - Support the message header of `ServiceBusMessageHeaders.SUBJECT` to specify the AMQP property of `subject` when sending messages [#27675](https://github.com/Azure/azure-sdk-for-java/pull/27675). -- Support adding builder custoimzers in `DefaultServiceBusNamespaceProducerFactory` and `DefaultServiceBusNamespaceProcessorFactory` [#27452](https://github.com/Azure/azure-sdk-for-java/pull/27452), [#27820](https://github.com/Azure/azure-sdk-for-java/pull/27820). +- Support adding builder customizers in `DefaultServiceBusNamespaceProducerFactory` and `DefaultServiceBusNamespaceProcessorFactory` [#27452](https://github.com/Azure/azure-sdk-for-java/pull/27452), [#27820](https://github.com/Azure/azure-sdk-for-java/pull/27820). ### Spring Messaging Azure Storage Queue This section includes changes in `spring-messaging-azure-storage-queue` module. diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java index a6d8369d2253..a75a0953a428 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java @@ -12,7 +12,10 @@ import com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2.OAuth2ClientAuthenticationJwkResolver; import com.azure.spring.cloud.autoconfigure.aad.implementation.webapi.AadJwtBearerGrantRequestEntityConverter; import com.azure.spring.cloud.autoconfigure.aad.implementation.webapp.AadAzureDelegatedOAuth2AuthorizedClientProvider; +import com.azure.spring.cloud.autoconfigure.aad.implementation.webapp.AadOidcIdTokenDecoderFactory; import com.azure.spring.cloud.autoconfigure.aad.properties.AadAuthenticationProperties; +import com.azure.spring.cloud.autoconfigure.aad.properties.AadAuthorizationServerEndpoints; +import com.azure.spring.cloud.autoconfigure.aad.properties.AadProfileProperties; import com.nimbusds.jose.jwk.JWK; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -20,6 +23,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer; import org.springframework.security.oauth2.client.JwtBearerOAuth2AuthorizedClientProvider; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider; @@ -36,8 +40,12 @@ import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtDecoderFactory; +import org.springframework.web.client.RestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createRestTemplate; /** *

@@ -93,8 +101,8 @@ public OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository() { @Conditional(ClientCertificatePropertiesCondition.class) OAuth2ClientAuthenticationJwkResolver oAuth2ClientAuthenticationJwkResolver(AadAuthenticationProperties properties) { return new AadOAuth2ClientAuthenticationJwkResolver( - properties.getCredential().getClientCertificatePath(), - properties.getCredential().getClientCertificatePassword()); + properties.getCredential().getClientCertificatePath(), + properties.getCredential().getClientCertificatePassword()); } /** @@ -116,21 +124,21 @@ OAuth2AuthorizedClientManager authorizedClientManager( JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, ObjectProvider jwkResolvers) { DefaultOAuth2AuthorizedClientManager manager = - new DefaultOAuth2AuthorizedClientManager(clientRegistrations, authorizedClients); + new DefaultOAuth2AuthorizedClientManager(clientRegistrations, authorizedClients); OAuth2ClientAuthenticationJwkResolver jwkResolver = jwkResolvers.getIfUnique(); // @formatter:off OAuth2AuthorizedClientProvider providers = - OAuth2AuthorizedClientProviderBuilder - .builder() - .authorizationCode() - .clientCredentials(builder -> - clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) - .password(builder -> passwordGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) - .provider(refreshTokenProvider) - .provider(jwtBearerProvider) - .provider(azureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients)) - .build(); + OAuth2AuthorizedClientProviderBuilder + .builder() + .authorizationCode() + .clientCredentials(builder -> + clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) + .password(builder -> passwordGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) + .provider(refreshTokenProvider) + .provider(jwtBearerProvider) + .provider(azureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients)) + .build(); // @formatter:on manager.setAuthorizedClientProvider(providers); return manager; @@ -142,14 +150,14 @@ JwtBearerOAuth2AuthorizedClientProvider azureAdJwtBearerProvider( ObjectProvider resolvers) { JwtBearerOAuth2AuthorizedClientProvider provider = new JwtBearerOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); - AadJwtBearerGrantRequestEntityConverter jwtBearerConverter = new AadJwtBearerGrantRequestEntityConverter(); + DefaultJwtBearerTokenResponseClient client = new DefaultJwtBearerTokenResponseClient(); + client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); + AadJwtBearerGrantRequestEntityConverter converter = new AadJwtBearerGrantRequestEntityConverter(); if (resolver != null) { - jwtBearerConverter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); + converter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); } - DefaultJwtBearerTokenResponseClient responseClient = new DefaultJwtBearerTokenResponseClient(); - responseClient.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); - responseClient.setRequestEntityConverter(jwtBearerConverter); - provider.setAccessTokenResponseClient(responseClient); + client.setRequestEntityConverter(converter); + provider.setAccessTokenResponseClient(client); return provider; } @@ -159,52 +167,63 @@ RefreshTokenOAuth2AuthorizedClientProvider azureRefreshTokenProvider( ObjectProvider resolvers) { RefreshTokenOAuth2AuthorizedClientProvider provider = new RefreshTokenOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); + DefaultRefreshTokenTokenResponseClient client = new DefaultRefreshTokenTokenResponseClient(); + client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { OAuth2RefreshTokenGrantRequestEntityConverter converter = new OAuth2RefreshTokenGrantRequestEntityConverter(); converter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); - - DefaultRefreshTokenTokenResponseClient responseClient = new DefaultRefreshTokenTokenResponseClient(); - responseClient.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); - responseClient.setRequestEntityConverter(converter); - provider.setAccessTokenResponseClient(responseClient); + client.setRequestEntityConverter(converter); } + provider.setAccessTokenResponseClient(client); return provider; } + /** + * Provide {@link JwtDecoderFactory} used in {@link OAuth2LoginConfigurer#init}. The {@link JwtDecoder} created by + * current {@link JwtDecoderFactory} will use {@link RestTemplate} created by {@link RestTemplateBuilder} bean. + * + * @param properties the AadAuthenticationProperties + * @return JwtDecoderFactory + */ + @Bean + @ConditionalOnMissingBean + JwtDecoderFactory azureAdJwtDecoderFactory(AadAuthenticationProperties properties) { + AadProfileProperties profile = properties.getProfile(); + AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints( + profile.getEnvironment().getActiveDirectoryEndpoint(), profile.getTenantId()); + return new AadOidcIdTokenDecoderFactory(endpoints.getJwkSetEndpoint(), createRestTemplate(restTemplateBuilder)); + } + private void passwordGrantBuilderAccessTokenResponseClientCustomizer( OAuth2AuthorizedClientProviderBuilder.PasswordGrantBuilder builder, OAuth2ClientAuthenticationJwkResolver resolver) { + DefaultPasswordTokenResponseClient client = new DefaultPasswordTokenResponseClient(); + client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { OAuth2PasswordGrantRequestEntityConverter converter = new OAuth2PasswordGrantRequestEntityConverter(); converter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); - - DefaultPasswordTokenResponseClient client = new DefaultPasswordTokenResponseClient(); - client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); client.setRequestEntityConverter(converter); - - builder.accessTokenResponseClient(client); } + builder.accessTokenResponseClient(client); } private void clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer( OAuth2AuthorizedClientProviderBuilder.ClientCredentialsGrantBuilder builder, OAuth2ClientAuthenticationJwkResolver resolver) { + DefaultClientCredentialsTokenResponseClient client = new DefaultClientCredentialsTokenResponseClient(); + client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { OAuth2ClientCredentialsGrantRequestEntityConverter converter = - new OAuth2ClientCredentialsGrantRequestEntityConverter(); + new OAuth2ClientCredentialsGrantRequestEntityConverter(); converter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); - - DefaultClientCredentialsTokenResponseClient client = new DefaultClientCredentialsTokenResponseClient(); - client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); client.setRequestEntityConverter(converter); - - builder.accessTokenResponseClient(client); } + builder.accessTokenResponseClient(client); } private AadAzureDelegatedOAuth2AuthorizedClientProvider azureDelegatedOAuth2AuthorizedClientProvider( - RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, - OAuth2AuthorizedClientRepository authorizedClients) { + RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, + OAuth2AuthorizedClientRepository authorizedClients) { return new AadAzureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java index c43aab2860e6..e6ad19bd01ee 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java @@ -65,9 +65,10 @@ public AadResourceServerConfiguration(RestTemplateBuilder restTemplateBuilder) { @ConditionalOnMissingBean(JwtDecoder.class) public JwtDecoder jwtDecoder(AadAuthenticationProperties aadAuthenticationProperties) { AadAuthorizationServerEndpoints identityEndpoints = new AadAuthorizationServerEndpoints( - aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), aadAuthenticationProperties.getProfile().getTenantId()); + aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), + aadAuthenticationProperties.getProfile().getTenantId()); NimbusJwtDecoder nimbusJwtDecoder = NimbusJwtDecoder - .withJwkSetUri(identityEndpoints.getJwkSetEndpoint()) + .withJwkSetUri(identityEndpoints.getJwkSetEndpoint()) .restOperations(createRestTemplate(restTemplateBuilder)) .build(); List> validators = createDefaultValidator(aadAuthenticationProperties); @@ -106,7 +107,7 @@ public List> createDefaultValidator(AadAuthenticationP @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class) @ConditionalOnExpression("!'${spring.cloud.azure.active-directory.application-type}'.equalsIgnoreCase('web_application_and_resource_server')") public static class DefaultAadResourceServerWebSecurityConfigurerAdapter extends - AadResourceServerWebSecurityConfigurerAdapter { + AadResourceServerWebSecurityConfigurerAdapter { /** * configure diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java index 6cf836892cba..314f9742f8e7 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreator.java @@ -5,14 +5,11 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.converter.FormHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler; import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter; import org.springframework.util.Assert; import org.springframework.web.client.RestTemplate; -import java.util.List; - /** * Util class used to create {@link RestTemplate}s for all Azure AD related http requests. */ @@ -27,25 +24,14 @@ public static RestTemplate createRestTemplate(RestTemplateBuilder builder) { } public static RestTemplate createOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { - RestTemplate restTemplate = createRestTemplate(builder); - restTemplate.setErrorHandler(new OAuth2ErrorResponseErrorHandler()); - return restTemplate; + builder = builder.errorHandler(new OAuth2ErrorResponseErrorHandler()); + return createRestTemplate(builder); } public static RestTemplate createOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { - RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); - List> converters = restTemplate.getMessageConverters(); - if (notContainsElementOfType(converters, FormHttpMessageConverter.class)) { - converters.add(new FormHttpMessageConverter()); - } - if (notContainsElementOfType(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)) { - converters.add(new OAuth2AccessTokenResponseHttpMessageConverter()); - } - return restTemplate; - } - - private static boolean notContainsElementOfType(List list, Class clazz) { - return list.stream().noneMatch(item -> item.getClass().equals(clazz)); + builder = builder.messageConverters( + new FormHttpMessageConverter(), new OAuth2AccessTokenResponseHttpMessageConverter()); + return createOAuth2ErrorResponseHandledRestTemplate(builder); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java new file mode 100644 index 000000000000..2ba71b071fb3 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad.implementation; + +import org.springframework.boot.web.client.RestTemplateCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +import java.net.InetSocketAddress; +import java.net.Proxy; + +@Configuration +public class RestTemplateProxyCustomizerConfiguration { + + public static final SimpleClientHttpRequestFactory FACTORY = createProxyFactory(); + + @Bean + public RestTemplateCustomizer proxyRestTemplateCustomizer() { + return (RestTemplate restTemplate) -> restTemplate.setRequestFactory(FACTORY); + } + + static SimpleClientHttpRequestFactory createProxyFactory() { + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080)); + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setProxy(proxy); + return factory; + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java index f5ba0fde806c..f2647ce320e2 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java @@ -10,14 +10,14 @@ import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.jackson2.OAuth2ClientJackson2Module; -import java.util.HashMap; +import java.util.Collections; import java.util.Map; public final class SerializerUtils { private static final ObjectMapper OBJECT_MAPPER; private static final TypeReference> TYPE_REFERENCE = - new TypeReference>() { - }; + new TypeReference>() { + }; static { OBJECT_MAPPER = new ObjectMapper(); @@ -33,6 +33,11 @@ public final class SerializerUtils { private SerializerUtils() { } + /** + * Serialize {@link Map} to {@link String}. + * @param authorizedClients the map to be serialized. It will not be modified in this method. + * @return The serialized {@link String}. + */ public static String serializeOAuth2AuthorizedClientMap(Map authorizedClients) { String result; try { @@ -43,9 +48,14 @@ public static String serializeOAuth2AuthorizedClientMap(Map deserializeOAuth2AuthorizedClientMap(String authorizedClientsString) { if (authorizedClientsString == null) { - return new HashMap<>(); + return Collections.emptyMap(); } Map authorizedClients; try { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java index af91381bb842..4318462b709c 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -4,12 +4,11 @@ package com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; -import org.springframework.core.convert.converter.Converter; import org.springframework.http.HttpHeaders; -import org.springframework.http.RequestEntity; import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequestEntityConverter; import org.springframework.util.MultiValueMap; +import org.springframework.util.MultiValueMapAdapter; import java.util.Collections; import java.util.UUID; @@ -18,7 +17,15 @@ * When using "auth-code" in AAD and AAD B2C, it's used to expand head and body parameters of the request. */ public abstract class AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter - extends OAuth2AuthorizationCodeGrantRequestEntityConverter { + extends OAuth2AuthorizationCodeGrantRequestEntityConverter { + + private static final MultiValueMap EMPTY_MULTI_VALUE_MAP = + new MultiValueMapAdapter<>(Collections.emptyMap()); + + protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { + addHeadersConverter(this::getHttpHeaders); + addParametersConverter(this::getHttpBody); + } /** * Gets the application ID. @@ -27,23 +34,11 @@ public abstract class AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter */ protected abstract String getApplicationId(); - @Override - @SuppressWarnings("unchecked") - public RequestEntity convert(OAuth2AuthorizationCodeGrantRequest request) { - addHeadersConverter(headersConverter); - addParametersConverter(parametersConverter); - return super.convert(request); - } - - private final Converter headersConverter = (request) -> getHttpHeaders(); - - private final Converter> parametersConverter = this::getHttpBody; - /** * Additional default headers information. * @return HttpHeaders */ - public HttpHeaders getHttpHeaders() { + protected HttpHeaders getHttpHeaders(OAuth2AuthorizationCodeGrantRequest request) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.put("x-client-SKU", Collections.singletonList(getApplicationId())); httpHeaders.put("x-client-VER", Collections.singletonList(AzureSpringIdentifier.VERSION)); @@ -56,7 +51,7 @@ public HttpHeaders getHttpHeaders() { * @param request OAuth2AuthorizationCodeGrantRequest * @return MultiValueMap */ - public MultiValueMap getHttpBody(OAuth2AuthorizationCodeGrantRequest request) { - return null; + protected MultiValueMap getHttpBody(OAuth2AuthorizationCodeGrantRequest request) { + return EMPTY_MULTI_VALUE_MAP; } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java index 4516ec6e1151..b2f8445e974a 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java @@ -13,6 +13,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -21,14 +22,14 @@ /** * An implementation of an {@link OAuth2AuthorizedClientRepository} that stores {@link OAuth2AuthorizedClient}'s in the * {@code HttpSession}. To make it compatible with different spring versions. Refs: - * https://github.com/spring-projects/spring-security/issues/9204 + * spring-security/issues/9204 * * @see OAuth2AuthorizedClientRepository * @see OAuth2AuthorizedClient */ public class JacksonHttpSessionOAuth2AuthorizedClientRepository implements OAuth2AuthorizedClientRepository { private static final String AUTHORIZED_CLIENTS_ATTR_NAME = - JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS"; + JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS"; private static final String MSG_REQUEST_CANNOT_BE_NULL = "request cannot be null"; @@ -48,10 +49,11 @@ public void saveAuthorizedClient(OAuth2AuthorizedClient authorizedClient, Authen Assert.notNull(authorizedClient, "authorizedClient cannot be null"); Assert.notNull(request, MSG_REQUEST_CANNOT_BE_NULL); Assert.notNull(response, "response cannot be null"); - Map authorizedClients = this.getAuthorizedClients(request); + Map authorizedClients = + new HashMap<>(this.getAuthorizedClients(request)); authorizedClients.put(authorizedClient.getClientRegistration().getRegistrationId(), authorizedClient); request.getSession().setAttribute(AUTHORIZED_CLIENTS_ATTR_NAME, - serializeOAuth2AuthorizedClientMap(authorizedClients)); + serializeOAuth2AuthorizedClientMap(authorizedClients)); } @Override @@ -59,13 +61,13 @@ public void removeAuthorizedClient(String clientRegistrationId, Authentication p HttpServletRequest request, HttpServletResponse response) { Assert.hasText(clientRegistrationId, "clientRegistrationId cannot be empty"); Assert.notNull(request, MSG_REQUEST_CANNOT_BE_NULL); - Map authorizedClients = this.getAuthorizedClients(request); + Map authorizedClients = new HashMap<>(this.getAuthorizedClients(request)); if (authorizedClients.remove(clientRegistrationId) != null) { if (authorizedClients.isEmpty()) { request.getSession().removeAttribute(AUTHORIZED_CLIENTS_ATTR_NAME); } else { request.getSession().setAttribute(AUTHORIZED_CLIENTS_ATTR_NAME, - serializeOAuth2AuthorizedClientMap(authorizedClients)); + serializeOAuth2AuthorizedClientMap(authorizedClients)); } } @@ -74,9 +76,9 @@ public void removeAuthorizedClient(String clientRegistrationId, Authentication p private Map getAuthorizedClients(HttpServletRequest request) { HttpSession session = request.getSession(false); return Optional.ofNullable(session) - .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) - .map(Object::toString) - .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) - .orElse(Collections.emptyMap()); + .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) + .map(Object::toString) + .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) + .orElse(Collections.emptyMap()); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOidcIdTokenDecoderFactory.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOidcIdTokenDecoderFactory.java new file mode 100644 index 000000000000..37706fb26f0a --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOidcIdTokenDecoderFactory.java @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad.implementation.webapp; + +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.core.oidc.OidcIdToken; +import org.springframework.security.oauth2.jose.jws.SignatureAlgorithm; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtDecoderFactory; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.web.client.RestOperations; + +/** + * A factory that provides a {@link JwtDecoder} used for {@link OidcIdToken} signature verification. + * + * @see azure-active-directory id-tokens + */ +public class AadOidcIdTokenDecoderFactory implements JwtDecoderFactory { + + private final JwtDecoder jwtDecoder; + + /** + * + * @param jwkSetUri The uri of the jwk set. For example: + * + * https://login.microsoftonline.com/common/discovery/v2.0/keys + * @param restOperations The RestOperations used to retrieve jwk from jwkSetUri. + */ + public AadOidcIdTokenDecoderFactory(String jwkSetUri, RestOperations restOperations) { + this.jwtDecoder = NimbusJwtDecoder + .withJwkSetUri(jwkSetUri) + .jwsAlgorithm(SignatureAlgorithm.RS256) + .restOperations(restOperations) + .build(); + } + + @Override + public JwtDecoder createDecoder(ClientRegistration context) { + return jwtDecoder; + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cAutoConfiguration.java index b1938f6b75b5..b4d6fafb724b 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cAutoConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cAutoConfiguration.java @@ -2,18 +2,28 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aadb2c; +import com.azure.spring.cloud.autoconfigure.aad.configuration.AadOAuth2ClientConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.configuration.AadB2cOAuth2ClientConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.configuration.AadB2cPropertiesConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.implementation.AadB2cConditions; +import com.azure.spring.cloud.autoconfigure.aadb2c.implementation.AadB2cOidcIdTokenDecoderFactory; import com.azure.spring.cloud.autoconfigure.aadb2c.properties.AadB2cProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer; +import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtDecoderFactory; +import org.springframework.web.client.RestTemplate; + +import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createRestTemplate; /** * Configure the necessary beans for AAD B2C authentication and authorization, @@ -26,6 +36,17 @@ @Import({ AadB2cPropertiesConfiguration.class, AadB2cOAuth2ClientConfiguration.class}) public class AadB2cAutoConfiguration { + private final RestTemplateBuilder restTemplateBuilder; + + /** + * Creates a new instance of {@link AadOAuth2ClientConfiguration}. + * + * @param restTemplateBuilder the RestTemplateBuilder + */ + public AadB2cAutoConfiguration(RestTemplateBuilder restTemplateBuilder) { + this.restTemplateBuilder = restTemplateBuilder; + } + /** * Declare AADB2CAuthorizationRequestResolver bean. * @param repository The clientRegistrationRepository, @@ -35,7 +56,7 @@ public class AadB2cAutoConfiguration { @Bean @ConditionalOnMissingBean public AadB2cAuthorizationRequestResolver b2cOAuth2AuthorizationRequestResolver( - ClientRegistrationRepository repository, AadB2cProperties properties) { + ClientRegistrationRepository repository, AadB2cProperties properties) { return new AadB2cAuthorizationRequestResolver(repository, properties); } @@ -61,6 +82,18 @@ public AadB2cLogoutSuccessHandler b2cLogoutSuccessHandler(AadB2cProperties prope @ConditionalOnMissingBean public AadB2cOidcLoginConfigurer b2cLoginConfigurer(AadB2cLogoutSuccessHandler handler, AadB2cAuthorizationRequestResolver resolver) { - return new AadB2cOidcLoginConfigurer(handler, resolver); + return new AadB2cOidcLoginConfigurer(handler, resolver, null, restTemplateBuilder); + } + + /** + * Provide {@link JwtDecoderFactory} used in {@link OAuth2LoginConfigurer#init}. The {@link JwtDecoder} created by + * current {@link JwtDecoderFactory} will use {@link RestTemplate} created by {@link RestTemplateBuilder} bean. + * + * @return JwtDecoderFactory + */ + @Bean + @ConditionalOnMissingBean + JwtDecoderFactory azureAdJwtDecoderFactory() { + return new AadB2cOidcIdTokenDecoderFactory(createRestTemplate(restTemplateBuilder)); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java index a6a4bec1d559..3a6b9128e0c9 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java @@ -3,6 +3,7 @@ package com.azure.spring.cloud.autoconfigure.aadb2c; import com.azure.spring.cloud.autoconfigure.aadb2c.implementation.AadB2cOAuth2AuthorizationCodeGrantRequestEntityConverter; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient; @@ -11,7 +12,7 @@ import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import java.util.Optional; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; /** * Configure B2C OAUTH2 login properties. @@ -26,6 +27,8 @@ public class AadB2cOidcLoginConfigurer extends AbstractHttpConfigurer accessTokenResponseClient; + private final RestTemplateBuilder restTemplateBuilder; + /** * Creates a new instance of {@link AadB2cOidcLoginConfigurer}. * @@ -33,19 +36,39 @@ public class AadB2cOidcLoginConfigurer extends AbstractHttpConfigurer accessTokenResponseClient) { + this(handler, resolver, accessTokenResponseClient, null); } + /** * Creates a new instance of {@link AadB2cOidcLoginConfigurer}. * * @param handler the AAD B2C logout success handler * @param resolver the AAD B2C authorization request resolver * @param accessTokenResponseClient the AAD B2C access token response client + * @param restTemplateBuilder the RestTemplateBuilder used to build OAuth2AccessTokenResponseClient. + * It will be used only when accessTokenResponseClient is null. */ - public AadB2cOidcLoginConfigurer(LogoutSuccessHandler handler, OAuth2AuthorizationRequestResolver resolver, OAuth2AccessTokenResponseClient accessTokenResponseClient) { + public AadB2cOidcLoginConfigurer(LogoutSuccessHandler handler, + OAuth2AuthorizationRequestResolver resolver, + OAuth2AccessTokenResponseClient accessTokenResponseClient, + RestTemplateBuilder restTemplateBuilder) { this.handler = handler; this.resolver = resolver; this.accessTokenResponseClient = accessTokenResponseClient; + this.restTemplateBuilder = restTemplateBuilder; } /** @@ -60,12 +83,12 @@ public void init(HttpSecurity http) throws Exception { http.logout() .logoutSuccessHandler(handler) .and() - .oauth2Login() + .oauth2Login() .authorizationEndpoint() - .authorizationRequestResolver(resolver) - .and() + .authorizationRequestResolver(resolver) + .and() .tokenEndpoint() - .accessTokenResponseClient(Optional.ofNullable(accessTokenResponseClient).orElseGet(this::accessTokenResponseClient)); + .accessTokenResponseClient(accessTokenResponseClient()); // @formatter:on } @@ -75,8 +98,12 @@ public void init(HttpSecurity http) throws Exception { * @return the access token response client */ protected OAuth2AccessTokenResponseClient accessTokenResponseClient() { - DefaultAuthorizationCodeTokenResponseClient result = new DefaultAuthorizationCodeTokenResponseClient(); - result.setRequestEntityConverter(new AadB2cOAuth2AuthorizationCodeGrantRequestEntityConverter()); - return result; + if (accessTokenResponseClient != null) { + return accessTokenResponseClient; + } + DefaultAuthorizationCodeTokenResponseClient client = new DefaultAuthorizationCodeTokenResponseClient(); + client.setRequestEntityConverter(new AadB2cOAuth2AuthorizationCodeGrantRequestEntityConverter()); + client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); + return client; } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cOidcIdTokenDecoderFactory.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cOidcIdTokenDecoderFactory.java new file mode 100644 index 000000000000..33c545132b65 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cOidcIdTokenDecoderFactory.java @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aadb2c.implementation; + +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; +import org.springframework.security.oauth2.core.OAuth2Error; +import org.springframework.security.oauth2.core.oidc.OidcIdToken; +import org.springframework.security.oauth2.jose.jws.SignatureAlgorithm; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtDecoderFactory; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestOperations; + +/** + * A factory that provides a {@link JwtDecoder} used for {@link OidcIdToken} signature verification. + * + */ +public class AadB2cOidcIdTokenDecoderFactory implements JwtDecoderFactory { + + private final RestOperations restOperations; + + /** + * + * @param restOperations The RestOperations used to retrieve jwk from jwkSetUri. + */ + public AadB2cOidcIdTokenDecoderFactory(RestOperations restOperations) { + this.restOperations = restOperations; + } + + @Override + public JwtDecoder createDecoder(ClientRegistration clientRegistration) { + String jwkSetUri = clientRegistration.getProviderDetails().getJwkSetUri(); + if (!StringUtils.hasText(jwkSetUri)) { + OAuth2Error oauth2Error = new OAuth2Error("missing_signature_verifier", + "Failed to find a Signature Verifier for Client Registration: '" + + clientRegistration.getRegistrationId() + + "'. Check to ensure you have configured the JwkSet URI.", + null); + throw new OAuth2AuthenticationException(oauth2Error, oauth2Error.toString()); + } + return NimbusJwtDecoder + .withJwkSetUri(jwkSetUri) + .jwsAlgorithm(SignatureAlgorithm.RS256) + .restOperations(restOperations) + .build(); + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java index cb0f0d422052..15f1fb26d225 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java @@ -13,7 +13,6 @@ import com.azure.spring.cloud.autoconfigure.context.AzureTokenCredentialAutoConfiguration; import com.azure.spring.cloud.core.implementation.credential.resolver.AzureTokenCredentialResolver; import com.azure.spring.cloud.core.implementation.factory.AbstractAzureServiceClientBuilderFactory; -import com.azure.spring.cloud.core.implementation.util.ReflectionUtils; import com.azure.spring.cloud.core.properties.AzureProperties; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,10 +20,11 @@ import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; public abstract class AbstractAzureServiceConfigurationTests, - P extends AzureProperties> { + P extends AzureProperties> { protected abstract ApplicationContextRunner getMinimalContextRunner(); @@ -37,55 +37,55 @@ public abstract class AbstractAzureServiceConfigurationTests { - assertSovereignCloudsSetInCredential(context, ClientSecretCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.client-secret=fake-client-secret" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, ClientSecretCredential.class); + }); } @Test protected void usGovCloudShouldWorkWithClientCertificateCredential() { getMinimalContextRunner() - .withPropertyValues( - getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", - getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", - getPropertyPrefix() + ".credential.client-id=fake-client-id", - getPropertyPrefix() + ".credential.client-certificate-path=fake-client-cert-path" - ) - .withConfiguration(AutoConfigurations.of( - AzureTokenCredentialAutoConfiguration.class, - AzureGlobalPropertiesAutoConfiguration.class - )) - .run(context -> { - assertSovereignCloudsSetInCredential(context, ClientCertificateCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.client-certificate-path=fake-client-cert-path" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, ClientCertificateCredential.class); + }); } @Test protected void usGovCloudShouldWorkWithUsernamePasswordCredential() { getMinimalContextRunner() - .withPropertyValues( - getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", - getPropertyPrefix() + ".credential.client-id=fake-client-id", - getPropertyPrefix() + ".credential.username=123", - getPropertyPrefix() + ".credential.password=123" - ) - .withConfiguration(AutoConfigurations.of( - AzureTokenCredentialAutoConfiguration.class, - AzureGlobalPropertiesAutoConfiguration.class - )) - .run(context -> { - assertSovereignCloudsSetInCredential(context, UsernamePasswordCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.username=123", + getPropertyPrefix() + ".credential.password=123" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, UsernamePasswordCredential.class); + }); } private void assertSovereignCloudsSetInCredential(AssertableApplicationContext context, Class credentialType) { @@ -105,12 +105,12 @@ private void assertSovereignCloudsSetInCredential(AssertableApplicationConte } private AzureTokenCredentialResolver getAzureTokenCredentialResolver(T builderFactory) { - return (AzureTokenCredentialResolver) ReflectionUtils.getField(getBuilderFactoryType(), - "tokenCredentialResolver", builderFactory); + return (AzureTokenCredentialResolver) getField(getBuilderFactoryType(), + "tokenCredentialResolver", builderFactory); } private IdentityClient getIdentityClient(TokenCredential credential) { - return (IdentityClient) ReflectionUtils.getField(credential.getClass(), "identityClient", credential); + return (IdentityClient) getField(credential.getClass(), "identityClient", credential); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/RestTemplateTestUtil.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/RestTemplateTestUtil.java new file mode 100644 index 000000000000..3d9e7a84b290 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/RestTemplateTestUtil.java @@ -0,0 +1,134 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad; + +import com.azure.spring.cloud.autoconfigure.aad.implementation.webapp.AadAzureDelegatedOAuth2AuthorizedClientProvider; +import com.nimbusds.jose.jwk.source.RemoteJWKSet; +import com.nimbusds.jose.proc.JWSVerificationKeySelector; +import com.nimbusds.jose.util.ResourceRetriever; +import com.nimbusds.jwt.proc.DefaultJWTProcessor; +import org.springframework.context.ApplicationContext; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.oauth2.client.AuthorizationCodeOAuth2AuthorizedClientProvider; +import org.springframework.security.oauth2.client.DelegatingOAuth2AuthorizedClientProvider; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationProvider; +import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationProvider; +import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager; +import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.ClientAuthenticationMethod; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtDecoderFactory; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.security.web.FilterChainProxy; +import org.springframework.web.client.RestTemplate; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration.FACTORY; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public final class RestTemplateTestUtil { + + private RestTemplateTestUtil() { + } + + public static void assertRestTemplateWellConfigured(ApplicationContext context) { + assertRestTemplateWellConfiguredForOAuth2AuthorizationCodeAuthenticationProvider(context); + assertRestTemplateWellConfiguredForAllOAuth2AuthorizedClientProviders(context); + assertRestTemplateWellConfiguredForJwtDecoderFactory(context); + } + + private static void assertRestTemplateWellConfiguredForOAuth2AuthorizationCodeAuthenticationProvider(ApplicationContext context) { + OAuth2AuthorizationCodeAuthenticationProvider provider = getOAuth2AuthorizationCodeAuthenticationProvider(context); + OAuth2AccessTokenResponseClient client = (OAuth2AccessTokenResponseClient) getField(provider.getClass(), "accessTokenResponseClient", provider); + assertRestTemplateWellConfiguredInOAuth2AccessTokenResponseClient(client); + } + + private static OAuth2AuthorizationCodeAuthenticationProvider getOAuth2AuthorizationCodeAuthenticationProvider(ApplicationContext context) { + FilterChainProxy proxy = context.getBean(FilterChainProxy.class); + OAuth2LoginAuthenticationFilter filter = proxy.getFilterChains() + .get(0) + .getFilters() + .stream() + .filter(f -> f instanceof OAuth2LoginAuthenticationFilter) + .map(f -> (OAuth2LoginAuthenticationFilter) f) + .findAny() + .orElse(null); + ProviderManager manager = (ProviderManager) getField(OAuth2LoginAuthenticationFilter.class, "authenticationManager", filter); + OAuth2LoginAuthenticationProvider provider = manager.getProviders() + .stream() + .filter(p -> p instanceof OAuth2LoginAuthenticationProvider) + .map(p -> (OAuth2LoginAuthenticationProvider) p) + .findAny() + .orElse(null); + return (OAuth2AuthorizationCodeAuthenticationProvider) getField(OAuth2LoginAuthenticationProvider.class, "authorizationCodeAuthenticationProvider", provider); + } + + private static void assertRestTemplateWellConfiguredForAllOAuth2AuthorizedClientProviders(ApplicationContext context) { + List providers = getAllOAuth2AuthorizedClientProviderThatShouldConfiguredRestTemplate(context); + // 3 providers: refreshToken, clientCredential, password. + assertTrue(providers.size() >= 3); + providers.forEach(provider -> { + OAuth2AccessTokenResponseClient client = (OAuth2AccessTokenResponseClient) getField(provider.getClass(), "accessTokenResponseClient", provider); + assertRestTemplateWellConfiguredInOAuth2AccessTokenResponseClient(client); + }); + } + + @SuppressWarnings("unchecked") + private static List getAllOAuth2AuthorizedClientProviderThatShouldConfiguredRestTemplate(ApplicationContext context) { + final DefaultOAuth2AuthorizedClientManager manager = context.getBean(DefaultOAuth2AuthorizedClientManager.class); + DelegatingOAuth2AuthorizedClientProvider delegatingProvider = + (DelegatingOAuth2AuthorizedClientProvider) getField(DefaultOAuth2AuthorizedClientManager.class, "authorizedClientProvider", manager); + List providers = + (List) getField(DelegatingOAuth2AuthorizedClientProvider.class, "authorizedClientProviders", delegatingProvider); + return providers.stream() + .filter(provider -> !(provider instanceof AuthorizationCodeOAuth2AuthorizedClientProvider)) + .filter(provider -> !(provider instanceof AadAzureDelegatedOAuth2AuthorizedClientProvider)) + .collect(Collectors.toList()); + } + + private static void assertRestTemplateWellConfiguredInOAuth2AccessTokenResponseClient(OAuth2AccessTokenResponseClient client) { + RestTemplate restTemplate = (RestTemplate) getField(client.getClass(), "restOperations", client); + assertEquals(FACTORY, restTemplate.getRequestFactory()); + } + + @SuppressWarnings("unchecked") + private static void assertRestTemplateWellConfiguredForJwtDecoderFactory(ApplicationContext context) { + JwtDecoderFactory factory = (JwtDecoderFactory) context.getBean(JwtDecoderFactory.class); + JwtDecoder jwtDecoder = factory.createDecoder(clientRegistration()); + assertTrue(jwtDecoder instanceof NimbusJwtDecoder); + DefaultJWTProcessor processor = (DefaultJWTProcessor) getField(NimbusJwtDecoder.class, "jwtProcessor", jwtDecoder); + JWSVerificationKeySelector selector = (JWSVerificationKeySelector) processor.getJWSKeySelector(); + RemoteJWKSet source = (RemoteJWKSet) selector.getJWKSource(); + ResourceRetriever retriever = source.getResourceRetriever(); + RestTemplate restTemplate = (RestTemplate) getField(retriever.getClass(), "restOperations", retriever); + assertEquals(FACTORY, restTemplate.getRequestFactory()); + } + + private static ClientRegistration clientRegistration() { + return ClientRegistration + .withRegistrationId("registration-id-1") + .redirectUri("{baseUrl}/{action}/oauth2/code/{registrationId}") + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .scope("scope-1") + .authorizationUri("https://example1.com/login/oauth/authorize") + .tokenUri("https://example1.com/login/oauth/access_token") + .jwkSetUri("https://example1.com/oauth2/jwk") + .issuerUri("https://example1.com") + .userInfoUri("https://api.example1.com/user") + .userNameAttributeName("id-1") + .clientName("Client Name 1") + .clientId("client-id-1") + .clientSecret("client-secret-1") + .build(); + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java index 054a22267433..edb7f2edf501 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/AadRestTemplateCreatorTest.java @@ -7,30 +7,39 @@ import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.boot.web.client.RestTemplateCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler; +import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter; +import org.springframework.test.web.client.ExpectedCount; +import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestTemplate; -import java.net.InetSocketAddress; -import java.net.Proxy; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.List; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2AccessTokenResponseClientRestTemplate; import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createOAuth2ErrorResponseHandledRestTemplate; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreator.createRestTemplate; -import static com.azure.spring.cloud.autoconfigure.aad.implementation.AadRestTemplateCreatorTest.RestTemplateProxyCustomizerConfiguration.FACTORY; +import static com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration.FACTORY; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.isA; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; +import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus; class AadRestTemplateCreatorTest { @@ -40,28 +49,56 @@ void testAadRestOperationConfiguration() { .withUserConfiguration(RestTemplateAutoConfiguration.class) .run((context) -> { RestTemplateBuilder builder = context.getBean(RestTemplateBuilder.class); + testCreateOAuth2ErrorResponseHandledRestTemplate(builder); + testCreateOAuth2AccessTokenResponseClientRestTemplate(builder); + }); + } - RestTemplate restTemplate = createRestTemplate(builder); - ResponseErrorHandler handler = restTemplate.getErrorHandler(); - assertNotEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); - List> converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + private void testCreateOAuth2ErrorResponseHandledRestTemplate(RestTemplateBuilder builder) { + RestTemplate restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); + ResponseErrorHandler handler = restTemplate.getErrorHandler(); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); + } - restTemplate = createOAuth2ErrorResponseHandledRestTemplate(builder); - handler = restTemplate.getErrorHandler(); - assertEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); - converters = restTemplate.getMessageConverters(); - assertFalse(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertFalse(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); + private void testCreateOAuth2AccessTokenResponseClientRestTemplate(RestTemplateBuilder builder) { + RestTemplate restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); + ResponseErrorHandler handler = restTemplate.getErrorHandler(); + assertEquals(OAuth2ErrorResponseErrorHandler.class, handler.getClass()); + List> converters = restTemplate.getMessageConverters(); + assertEquals(2, converters.size()); + assertThat(converters, hasItem(isA(FormHttpMessageConverter.class))); + assertThat(converters, hasItem(isA(OAuth2AccessTokenResponseHttpMessageConverter.class))); - restTemplate = createOAuth2AccessTokenResponseClientRestTemplate(builder); - handler = restTemplate.getErrorHandler(); - assertEquals(handler.getClass(), OAuth2ErrorResponseErrorHandler.class); - converters = restTemplate.getMessageConverters(); - assertTrue(hasItemOfClass(converters, FormHttpMessageConverter.class)); - assertTrue(hasItemOfClass(converters, OAuth2AccessTokenResponseHttpMessageConverter.class)); - }); + testOAuth2AccessTokenResponseCanBeConstructed(restTemplate); + } + + private void testOAuth2AccessTokenResponseCanBeConstructed(RestTemplate restTemplate) { + URI url; + try { + url = new URI("https://login.microsoftonline.comv/common/oauth2/v2.0/token"); + } catch (URISyntaxException e) { + throw new IllegalStateException(e); + } + MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); + mockServer + .expect(ExpectedCount.once(), requestTo(url)) + .andRespond(withStatus(HttpStatus.OK) + .contentType(MediaType.APPLICATION_JSON) + .body(readAccessTokenResponse())); + OAuth2AccessTokenResponse response = restTemplate + .exchange(new RequestEntity<>(HttpMethod.POST, url), OAuth2AccessTokenResponse.class) + .getBody(); + assertNotNull(response); + assertEquals("test_access_token_value", response.getAccessToken().getTokenValue()); + } + + private String readAccessTokenResponse() { + try { + return new String(Files.readAllBytes( + Paths.get("src/test/resources/aad/access-token-response.json")), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new IllegalStateException(e); + } } @Test @@ -76,27 +113,4 @@ void testRestOperationProxyConfiguration() { }); } - static boolean hasItemOfClass(List list, Class clazz) { - return list.stream() - .anyMatch(item -> item.getClass().equals(clazz)); - } - - @Configuration - static class RestTemplateProxyCustomizerConfiguration { - - static final SimpleClientHttpRequestFactory FACTORY = createProxyFactory(); - - @Bean - public RestTemplateCustomizer proxyRestTemplateCustomizer() { - return (RestTemplate restTemplate) -> restTemplate.setRequestFactory(FACTORY); - } - - static SimpleClientHttpRequestFactory createProxyFactory() { - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080)); - SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); - factory.setProxy(proxy); - return factory; - } - } - } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java index 823343555450..b98b842c636d 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java @@ -5,6 +5,7 @@ import com.azure.spring.cloud.autoconfigure.aad.AadClientRegistrationRepository; import com.azure.spring.cloud.autoconfigure.aad.configuration.AadOAuth2ClientConfiguration; +import com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration; import com.azure.spring.cloud.autoconfigure.aad.implementation.TestJwks; import com.azure.spring.cloud.autoconfigure.aad.implementation.webapi.AadJwtBearerGrantRequestEntityConverter; import com.azure.spring.cloud.autoconfigure.aad.properties.AadAuthenticationProperties; @@ -33,6 +34,7 @@ import java.util.Arrays; import java.util.Set; +import static com.azure.spring.cloud.autoconfigure.aad.RestTemplateTestUtil.assertRestTemplateWellConfigured; import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.oauthClientAndResourceServerRunner; import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.resourceServerContextRunner; import static com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils.resourceServerWithOboContextRunner; @@ -50,9 +52,9 @@ class AadOAuth2ClientConfigurationTests { @Test void testWithoutAnyPropertiesSet() { new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of( - HttpMessageConvertersAutoConfiguration.class, - RestTemplateAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of( + HttpMessageConvertersAutoConfiguration.class, + RestTemplateAutoConfiguration.class)) .withUserConfiguration(AadOAuth2ClientConfiguration.class) .run(context -> { assertThat(context).doesNotHaveBean(AadAuthenticationProperties.class); @@ -102,9 +104,9 @@ void testResourceServerWithOboOnlyGraphClient() { "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=https://graph.microsoft.com/User.Read") .run(context -> { final AadClientRegistrationRepository oboRepo = context.getBean( - AadClientRegistrationRepository.class); + AadClientRegistrationRepository.class); final OAuth2AuthorizedClientRepository aadOboRepo = context.getBean( - OAuth2AuthorizedClientRepository.class); + OAuth2AuthorizedClientRepository.class); ClientRegistration graph = oboRepo.findByRegistrationId("graph"); Set graphScopes = graph.getScopes(); @@ -151,9 +153,9 @@ void testResourceServerWithOboExistCustomAndGraphClient() { ) .run(context -> { final AadClientRegistrationRepository oboRepo = context.getBean( - AadClientRegistrationRepository.class); + AadClientRegistrationRepository.class); final OAuth2AuthorizedClientRepository aadOboRepo = context.getBean( - OAuth2AuthorizedClientRepository.class); + OAuth2AuthorizedClientRepository.class); ClientRegistration graph = oboRepo.findByRegistrationId("graph"); ClientRegistration custom = oboRepo.findByRegistrationId("custom"); @@ -182,9 +184,9 @@ void defaultConverterInJwtBearerOAuth2AuthorizedClientProviderWhenNotUsingPrivat .run(context -> { assertThat(context).doesNotHaveBean(OAuth2ClientAuthenticationJwkResolver.class); final JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider = context.getBean( - JwtBearerOAuth2AuthorizedClientProvider.class); + JwtBearerOAuth2AuthorizedClientProvider.class); final ClientRegistrationRepository clientRepository = context.getBean( - ClientRegistrationRepository.class); + ClientRegistrationRepository.class); MultiValueMap parameters = convertParameters(jwtBearerProvider, clientRepository); assertThat(parameters).containsEntry("requested_token_use", Arrays.asList("on_behalf_of")); }); @@ -212,9 +214,9 @@ void customConverterInJwtBearerOAuth2AuthorizedClientProviderWhenUsingPrivateKey .run(context -> { assertThat(context).hasSingleBean(OAuth2ClientAuthenticationJwkResolver.class); final JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider = context.getBean( - JwtBearerOAuth2AuthorizedClientProvider.class); + JwtBearerOAuth2AuthorizedClientProvider.class); final ClientRegistrationRepository clientRepository = context.getBean( - ClientRegistrationRepository.class); + ClientRegistrationRepository.class); MultiValueMap parameters = convertParameters(jwtBearerProvider, clientRepository); assertThat(parameters).containsEntry("requested_token_use", Arrays.asList("on_behalf_of")); @@ -223,24 +225,52 @@ void customConverterInJwtBearerOAuth2AuthorizedClientProviderWhenUsingPrivateKey }); } + @Test + void restTemplateWellConfiguredWhenNotUsingPrivateKeyJwtMethod() { + webApplicationContextRunner() + .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) + .run(context -> { + assertThat(context).doesNotHaveBean(OAuth2ClientAuthenticationJwkResolver.class); + assertRestTemplateWellConfigured(context); + }); + } + + @Test + void restTemplateWellConfiguredWhenUsingPrivateKeyJwtMethod() { + webApplicationContextRunner() + .withPropertyValues( + "spring.cloud.azure.active-directory.enabled=true", + "spring.cloud.azure.active-directory.credential.client-certificate-path=/test/test.pfx", + "spring.cloud.azure.active-directory.credential.client-certificate-password=test", + "spring.cloud.azure.active-directory.authorization-clients.graph.client-authentication-method=private_key_jwt", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=https://graph.microsoft.com/User.Read", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=api://52261059-e515-488e-84fd-a09a3f372814/File.Read" + ) + .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) + .run(context -> { + assertThat(context).hasSingleBean(OAuth2ClientAuthenticationJwkResolver.class); + assertRestTemplateWellConfigured(context); + }); + } + @SuppressWarnings("unchecked") private MultiValueMap convertParameters(JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, ClientRegistrationRepository clientRepository) { OAuth2AccessTokenResponseClient client = - (OAuth2AccessTokenResponseClient) ReflectionTestUtils.getField(jwtBearerProvider, "accessTokenResponseClient"); + (OAuth2AccessTokenResponseClient) ReflectionTestUtils.getField(jwtBearerProvider, "accessTokenResponseClient"); assertThat(client.getClass().getSimpleName()).isEqualTo(DefaultJwtBearerTokenResponseClient.class.getSimpleName()); JwtBearerGrantRequestEntityConverter requestEntityConverter = - (JwtBearerGrantRequestEntityConverter) ReflectionTestUtils.getField(client, "requestEntityConverter"); + (JwtBearerGrantRequestEntityConverter) ReflectionTestUtils.getField(client, "requestEntityConverter"); assertThat(requestEntityConverter.getClass().getSimpleName()).isEqualTo(AadJwtBearerGrantRequestEntityConverter.class.getSimpleName()); Converter> parametersConverter = - (Converter>) ReflectionTestUtils.getField(requestEntityConverter, "parametersConverter"); + (Converter>) ReflectionTestUtils.getField(requestEntityConverter, "parametersConverter"); JwtBearerGrantRequest request = new JwtBearerGrantRequest(clientRepository.findByRegistrationId("graph"), mock(Jwt.class)); return parametersConverter.convert(request); } - class TestOAuth2ClientAuthenticationJwkResolver implements OAuth2ClientAuthenticationJwkResolver { + static class TestOAuth2ClientAuthenticationJwkResolver implements OAuth2ClientAuthenticationJwkResolver { private final JWK jwk; diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepositoryTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepositoryTest.java new file mode 100644 index 000000000000..01b51112160d --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepositoryTest.java @@ -0,0 +1,240 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.aad.implementation.oauth2; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.ClientAuthenticationMethod; +import org.springframework.security.oauth2.core.OAuth2AccessToken; + +import javax.servlet.http.HttpSession; +import java.time.Instant; +import java.util.Map; + +import static com.azure.spring.cloud.autoconfigure.aad.implementation.jackson.SerializerUtils.deserializeOAuth2AuthorizedClientMap; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.security.oauth2.core.OAuth2AccessToken.TokenType.BEARER; + +class JacksonHttpSessionOAuth2AuthorizedClientRepositoryTest { + private final String principalName1 = "principalName-1"; + private final String principalName2 = "principalName-2"; + + private final ClientRegistration registration1 = ClientRegistration + .withRegistrationId("registration-id-1") + .redirectUri("{baseUrl}/{action}/oauth2/code/{registrationId}") + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .scope("scope-1") + .authorizationUri("https://example1.com/login/oauth/authorize") + .tokenUri("https://example1.com/login/oauth/access_token") + .jwkSetUri("https://example1.com/oauth2/jwk") + .issuerUri("https://example1.com") + .userInfoUri("https://api.example1.com/user") + .userNameAttributeName("id-1") + .clientName("Client Name 1") + .clientId("client-id-1") + .clientSecret("client-secret-1") + .build(); + + private final ClientRegistration registration2 = ClientRegistration + .withRegistrationId("registration-id-2") + .redirectUri("{baseUrl}/{action}/oauth2/code/{registrationId}") + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .scope("scope-2") + .authorizationUri("https://example2.com/login/oauth/authorize") + .tokenUri("https://example2.com/login/oauth/access_token") + .userInfoUri("https://api.example2.com/user") + .userNameAttributeName("id-2") + .clientName("Client Name 2") + .clientId("client-id-2") + .clientSecret("client-secret-2") + .build(); + + private final String registrationId1 = this.registration1.getRegistrationId(); + + private final String registrationId2 = this.registration2.getRegistrationId(); + + private final OAuth2AccessToken oAuth2AccessToken1 = new OAuth2AccessToken(BEARER, "tokenValue1", Instant.now(), Instant.now().plusMillis(3_600_000)); + private final OAuth2AccessToken oAuth2AccessToken2 = new OAuth2AccessToken(BEARER, "tokenValue2", Instant.now(), Instant.now().plusMillis(3_600_000)); + + private final OAuth2AuthorizedClient authorizedClient1 = new OAuth2AuthorizedClient(this.registration1, this.principalName1, oAuth2AccessToken1); + + private final OAuth2AuthorizedClient authorizedClient2 = new OAuth2AuthorizedClient(this.registration2, this.principalName2, oAuth2AccessToken2); + + private final JacksonHttpSessionOAuth2AuthorizedClientRepository authorizedClientRepository = + new JacksonHttpSessionOAuth2AuthorizedClientRepository(); + private MockHttpServletRequest request; + + private MockHttpServletResponse response; + + @BeforeEach + void setup() { + this.request = new MockHttpServletRequest(); + this.response = new MockHttpServletResponse(); + } + + @Test + void loadAuthorizedClientWhenClientRegistrationIdIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.loadAuthorizedClient(null, null, this.request)); + } + + @Test + void loadAuthorizedClientWhenPrincipalNameIsNullThenExceptionNotThrown() { + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + } + + @Test + void loadAuthorizedClientWhenRequestIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, null)); + } + + @Test + void loadAuthorizedClientWhenClientRegistrationNotFoundThenReturnNull() { + OAuth2AuthorizedClient authorizedClient = + this.authorizedClientRepository.loadAuthorizedClient("registration-not-found", null, this.request); + assertThat(authorizedClient).isNull(); + } + + @Test + void loadAuthorizedClientWhenSavedThenReturnAuthorizedClient() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + OAuth2AuthorizedClient loadedAuthorizedClient = + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + assertSame(authorizedClient1, loadedAuthorizedClient); + } + + @Test + void saveAuthorizedClientWhenAuthorizedClientIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.saveAuthorizedClient(null, null, this.request, this.response)); + } + + @Test + void saveAuthorizedClientWhenAuthenticationIsNullThenExceptionNotThrown() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + } + + @Test + void saveAuthorizedClientWhenRequestIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, null, this.response)); + } + + @Test + void saveAuthorizedClientWhenResponseIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, null)); + } + + @Test + void saveAuthorizedClientWhenSavedThenSavedToSession() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + + HttpSession session = this.request.getSession(false); + assertThat(session).isNotNull(); + String authorizedClientsString = (String) session.getAttribute( + JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS"); + Map authorizedClients = deserializeOAuth2AuthorizedClientMap(authorizedClientsString); + assertThat(authorizedClients).isNotEmpty(); + assertThat(authorizedClients).hasSize(1); + OAuth2AuthorizedClient loadedAuthorizedClient = authorizedClients.values().iterator().next(); + assertSame(authorizedClient1, loadedAuthorizedClient); + } + + @Test + void removeAuthorizedClientWhenClientRegistrationIdIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.removeAuthorizedClient(null, null, this.request, this.response)); + } + + @Test + void removeAuthorizedClientWhenPrincipalNameIsNullThenExceptionNotThrown() { + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, this.request, this.response); + } + + @Test + void removeAuthorizedClientWhenRequestIsNullThenThrowIllegalArgumentException() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, null, this.response)); + } + + @Test + void removeAuthorizedClientWhenResponseIsNullThenExceptionNotThrown() { + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, this.request, null); + } + + @Test + void removeAuthorizedClientWhenNotSavedThenSessionNotCreated() { + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId2, null, this.request, this.response); + assertThat(this.request.getSession(false)).isNull(); + } + + @Test + void removeAuthorizedClientWhenClient1SavedAndClient2RemovedThenClient1NotRemoved() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + // Remove registrationId2 (never added so is not removed either) + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId2, null, this.request, this.response); + OAuth2AuthorizedClient loadedAuthorizedClient1 = + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + assertThat(loadedAuthorizedClient1).isNotNull(); + assertSame(authorizedClient1, loadedAuthorizedClient1); + } + + @Test + void removeAuthorizedClientWhenSavedThenRemoved() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + OAuth2AuthorizedClient loadedAuthorizedClient = + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + assertSame(authorizedClient1, loadedAuthorizedClient); + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, this.request, this.response); + loadedAuthorizedClient = this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + assertThat(loadedAuthorizedClient).isNull(); + } + + @Test + void removeAuthorizedClientWhenSavedThenRemovedFromSession() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + OAuth2AuthorizedClient loadedAuthorizedClient = + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId1, null, this.request); + assertSame(authorizedClient1, loadedAuthorizedClient); + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, this.request, this.response); + HttpSession session = this.request.getSession(false); + assertThat(session).isNotNull(); + assertThat(session.getAttribute(JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS")).isNull(); + } + + @Test + void removeAuthorizedClientWhenClient1Client2SavedAndClient1RemovedThenClient2NotRemoved() { + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient1, null, this.request, this.response); + this.authorizedClientRepository.saveAuthorizedClient(authorizedClient2, null, this.request, this.response); + this.authorizedClientRepository.removeAuthorizedClient(this.registrationId1, null, this.request, this.response); + OAuth2AuthorizedClient loadedAuthorizedClient2 = + this.authorizedClientRepository.loadAuthorizedClient(this.registrationId2, null, this.request); + assertThat(loadedAuthorizedClient2).isNotNull(); + assertSame(authorizedClient2, loadedAuthorizedClient2); + } + + private void assertSame(OAuth2AuthorizedClient client1, OAuth2AuthorizedClient client2) { + assertEquals(client1.getClientRegistration().getClientId(), client2.getClientRegistration().getClientId()); + assertEquals(client1.getClientRegistration().getRegistrationId(), client2.getClientRegistration().getRegistrationId()); + assertEquals(client1.getClientRegistration().getClientName(), client2.getClientRegistration().getClientName()); + assertEquals(client1.getClientRegistration().getClientSecret(), client2.getClientRegistration().getClientSecret()); + assertEquals(client1.getClientRegistration().getClientAuthenticationMethod(), client2.getClientRegistration().getClientAuthenticationMethod()); + assertEquals(client1.getClientRegistration().getAuthorizationGrantType(), client2.getClientRegistration().getAuthorizationGrantType()); + assertEquals(client1.getPrincipalName(), client2.getPrincipalName()); + assertEquals(client1.getAccessToken().getTokenType(), client2.getAccessToken().getTokenType()); + assertEquals(client1.getAccessToken().getTokenValue(), client2.getAccessToken().getTokenValue()); + assertEquals(client1.getAccessToken().getScopes(), client2.getAccessToken().getScopes()); + } +} diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java index 1e110859858b..3e89a8aa8ad2 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java @@ -5,7 +5,7 @@ import com.azure.spring.cloud.autoconfigure.aad.AadClientRegistrationRepository; import com.azure.spring.cloud.autoconfigure.aad.implementation.WebApplicationContextRunnerUtils; -import org.hamcrest.Matcher; +import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.http.HttpEntity; @@ -19,31 +19,31 @@ import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse; import org.springframework.util.MultiValueMap; +import java.util.Collections; import java.util.Optional; import static com.azure.spring.cloud.autoconfigure.aad.AadClientRegistrationRepository.AZURE_CLIENT_REGISTRATION_ID; -import static org.hamcrest.CoreMatchers.hasItems; -import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests { private WebApplicationContextRunner getContextRunner() { return WebApplicationContextRunnerUtils - .webApplicationContextRunner() - .withPropertyValues( - "spring.cloud.azure.active-directory.enabled = true", - "spring.cloud.azure.active-directory.base-uri = fake-uri", - "spring.cloud.azure.active-directory.authorization-clients.graph.scopes = Graph.Scope", - "spring.cloud.azure.active-directory.authorization-clients.arm.scopes = Arm.Scope", - "spring.cloud.azure.active-directory.authorization-clients.arm.authorization-grant-type = authorization_code"); + .webApplicationContextRunner() + .withPropertyValues( + "spring.cloud.azure.active-directory.enabled = true", + "spring.cloud.azure.active-directory.base-uri = fake-uri", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes = Graph.Scope", + "spring.cloud.azure.active-directory.authorization-clients.arm.scopes = Arm.Scope", + "spring.cloud.azure.active-directory.authorization-clients.arm.authorization-grant-type = authorization_code"); } @Test void addScopeForAzureClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration azure = repository.findByRegistrationId(AZURE_CLIENT_REGISTRATION_ID); MultiValueMap body = convertedBodyOf(repository, createCodeGrantRequest(azure)); assertEquals("openid profile offline_access", body.getFirst("scope")); @@ -54,7 +54,7 @@ void addScopeForAzureClient() { void addScopeForAuthorizationCodeClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration arm = repository.findByRegistrationId("arm"); MultiValueMap body = convertedBodyOf(repository, createCodeGrantRequest(arm)); assertEquals("Arm.Scope openid profile offline_access", body.getFirst("scope")); @@ -62,52 +62,66 @@ void addScopeForAuthorizationCodeClient() { } @Test - @SuppressWarnings("unchecked") + void onlyAddScopeOnceEvenConvertMethodExecutedMultipleTimes() { + getContextRunner().run(context -> { + AadClientRegistrationRepository repository = + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + AadOAuth2AuthorizationCodeGrantRequestEntityConverter converter = + new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); + ClientRegistration azure = repository.findByRegistrationId(AZURE_CLIENT_REGISTRATION_ID); + OAuth2AuthorizationCodeGrantRequest request = createCodeGrantRequest(azure); + // Convert method execute 2 times + converter.convert(request); + RequestEntity entity = converter.convert(request); + MultiValueMap map = WebApplicationContextRunnerUtils.toMultiValueMap(entity); + assertEquals(1, map.get("scope").size()); + }); + } + + @Test void addHeadersForAzureClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration azure = repository.findByRegistrationId(AZURE_CLIENT_REGISTRATION_ID); HttpHeaders httpHeaders = convertedHeaderOf(repository, createCodeGrantRequest(azure)); - assertThat(httpHeaders.entrySet(), (Matcher) hasItems(expectedHeaders(repository))); + testHttpHeaders(httpHeaders); }); } @Test - @SuppressWarnings("unchecked") void addHeadersForAuthorizationCodeClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration arm = repository.findByRegistrationId("arm"); HttpHeaders httpHeaders = convertedHeaderOf(repository, createCodeGrantRequest(arm)); - assertThat(httpHeaders.entrySet(), (Matcher) hasItems(expectedHeaders(repository))); + testHttpHeaders(httpHeaders); }); } private HttpHeaders convertedHeaderOf(AadClientRegistrationRepository repository, OAuth2AuthorizationCodeGrantRequest request) { AadOAuth2AuthorizationCodeGrantRequestEntityConverter converter = - new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); + new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); RequestEntity entity = converter.convert(request); return Optional.ofNullable(entity) - .map(HttpEntity::getHeaders) - .orElse(null); + .map(HttpEntity::getHeaders) + .orElse(null); } - private Object[] expectedHeaders(AadClientRegistrationRepository repository) { - return new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()) - .getHttpHeaders() - .entrySet() - .stream() - .filter(entry -> !entry.getKey().equals("client-request-id")) - .toArray(); + private void testHttpHeaders(HttpHeaders headers) { + assertTrue(headers.containsKey("x-client-SKU")); + assertEquals(Collections.singletonList(AzureSpringIdentifier.AZURE_SPRING_AAD), headers.get("x-client-SKU")); + assertTrue(headers.containsKey("x-client-VER")); + assertEquals(Collections.singletonList(AzureSpringIdentifier.VERSION), headers.get("x-client-VER")); + assertTrue(headers.containsKey("client-request-id")); } private MultiValueMap convertedBodyOf(AadClientRegistrationRepository repository, OAuth2AuthorizationCodeGrantRequest request) { AadOAuth2AuthorizationCodeGrantRequestEntityConverter converter = - new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); + new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); RequestEntity entity = converter.convert(request); return WebApplicationContextRunnerUtils.toMultiValueMap(entity); } @@ -118,8 +132,8 @@ private OAuth2AuthorizationCodeGrantRequest createCodeGrantRequest(ClientRegistr private OAuth2AuthorizationExchange createExchange(ClientRegistration client) { return new OAuth2AuthorizationExchange( - createAuthorizationRequest(client), - createAuthorizationResponse()); + createAuthorizationRequest(client), + createAuthorizationResponse()); } private OAuth2AuthorizationRequest createAuthorizationRequest(ClientRegistration client) { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java index 2852a9e1f52f..2297c4a4f43e 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java @@ -2,9 +2,12 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.aadb2c.implementation; +import com.azure.spring.cloud.autoconfigure.aad.RestTemplateTestUtil; +import com.azure.spring.cloud.autoconfigure.aad.implementation.RestTemplateProxyCustomizerConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cAuthorizationRequestResolver; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cAutoConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cLogoutSuccessHandler; +import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cOidcLoginConfigurer; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cResourceServerAutoConfiguration; import com.azure.spring.cloud.autoconfigure.aadb2c.properties.AadB2cProperties; import com.azure.spring.cloud.autoconfigure.aadb2c.properties.AuthorizationClientProperties; @@ -19,6 +22,9 @@ import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken; @@ -249,9 +255,9 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { AadB2cConditions.ClientRegistrationCondition clientRegistrationCondition = spy(AadB2cConditions.ClientRegistrationCondition.class); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.UserFlowCondition.class)) - .thenReturn(userFlowCondition); + .thenReturn(userFlowCondition); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.ClientRegistrationCondition.class)) - .thenReturn(clientRegistrationCondition); + .thenReturn(clientRegistrationCondition); new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( WebResourceServerApp.class, @@ -266,4 +272,33 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { }); } } + + @Test + void testRestTemplateWellConfigured() { + getDefaultContextRunner() + .withUserConfiguration(RestTemplateProxyCustomizerConfiguration.class, AadB2cTestWebSecurityConfiguration.class) + .withPropertyValues("spring.cloud.azure.active-directory.b2c.enabled=true") + .run(RestTemplateTestUtil::assertRestTemplateWellConfigured); + } + + @EnableWebSecurity + public static class AadB2cTestWebSecurityConfiguration extends WebSecurityConfigurerAdapter { + + private final AadB2cOidcLoginConfigurer configurer; + + AadB2cTestWebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer) { + this.configurer = configurer; + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + // @formatter:off + http + .authorizeRequests() + .anyRequest().authenticated() + .and() + .apply(configurer); + // @formatter:on + } + } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/CosmosUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/CosmosUserAgentTests.java index 187764bdd973..024c46794adf 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/CosmosUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/CosmosUserAgentTests.java @@ -9,7 +9,6 @@ import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.cosmos.AzureCosmosAutoConfiguration; import com.azure.spring.cloud.autoconfigure.implementation.cosmos.properties.AzureCosmosProperties; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.cosmos.CosmosClientBuilderFactory; import org.junit.jupiter.api.Assertions; @@ -17,6 +16,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -28,23 +28,23 @@ void userAgentTest() { final CosmosClient mockCosmosClient = mock(CosmosClient.class); final CosmosAsyncClient cosmosAsyncClient = mock(CosmosAsyncClient.class); new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(AzureCosmosAutoConfiguration.class)) - .withPropertyValues("spring.cloud.azure.cosmos.endpoint=sample") - .withBean(AzureGlobalProperties.class, AzureGlobalProperties::new) - .withBean(CosmosClient.class, () -> mockCosmosClient) - .withBean(CosmosAsyncClient.class, () -> cosmosAsyncClient) - .run(context -> { - assertThat(context).hasSingleBean(AzureCosmosProperties.class); - assertThat(context).hasSingleBean(CosmosClientBuilderFactory.class); - assertThat(context).hasSingleBean(CosmosClientBuilder.class); - assertThat(context).hasSingleBean(CosmosClient.class); - assertThat(context).hasSingleBean(CosmosAsyncClient.class); - - CosmosClientBuilder builder = context.getBean(CosmosClientBuilder.class); - String userAgent = (String) UserAgentTestUtil.getPrivateFieldValue(CosmosClientBuilder.class, "userAgentSuffix", builder); - Assertions.assertNotNull(userAgent); - Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_COSMOS, userAgent); - }); + .withConfiguration(AutoConfigurations.of(AzureCosmosAutoConfiguration.class)) + .withPropertyValues("spring.cloud.azure.cosmos.endpoint=sample") + .withBean(AzureGlobalProperties.class, AzureGlobalProperties::new) + .withBean(CosmosClient.class, () -> mockCosmosClient) + .withBean(CosmosAsyncClient.class, () -> cosmosAsyncClient) + .run(context -> { + assertThat(context).hasSingleBean(AzureCosmosProperties.class); + assertThat(context).hasSingleBean(CosmosClientBuilderFactory.class); + assertThat(context).hasSingleBean(CosmosClientBuilder.class); + assertThat(context).hasSingleBean(CosmosClient.class); + assertThat(context).hasSingleBean(CosmosAsyncClient.class); + + CosmosClientBuilder builder = context.getBean(CosmosClientBuilder.class); + String userAgent = (String) getField(CosmosClientBuilder.class, "userAgentSuffix", builder); + Assertions.assertNotNull(userAgent); + Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_COSMOS, userAgent); + }); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventHubsUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventHubsUserAgentTests.java index 01024fb0d899..9ffa42163c8a 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventHubsUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventHubsUserAgentTests.java @@ -12,7 +12,6 @@ import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.eventhubs.AzureEventHubsAutoConfiguration; import com.azure.spring.cloud.autoconfigure.eventhubs.TestCheckpointStore; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsErrorHandler; import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsRecordMessageListener; @@ -21,6 +20,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class EventHubsUserAgentTests { @@ -45,8 +45,8 @@ void userAgentTest() { assertThat(context).hasSingleBean(EventHubConsumerClient.class); EventProcessorClientBuilder eventProcessorClientBuilder = context.getBean(EventProcessorClientBuilder.class); - EventHubClientBuilder eventHubClientBuilder = (EventHubClientBuilder) UserAgentTestUtil.getPrivateFieldValue(EventProcessorClientBuilder.class, "eventHubClientBuilder", eventProcessorClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(EventHubClientBuilder.class, "clientOptions", eventHubClientBuilder); + EventHubClientBuilder eventHubClientBuilder = (EventHubClientBuilder) getField(EventProcessorClientBuilder.class, "eventHubClientBuilder", eventProcessorClientBuilder); + ClientOptions options = (ClientOptions) getField(EventHubClientBuilder.class, "clientOptions", eventHubClientBuilder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_EVENT_HUBS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventProcessorUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventProcessorUserAgentTests.java index b2da54a86cea..cd7eff1df734 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventProcessorUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/EventProcessorUserAgentTests.java @@ -11,7 +11,6 @@ import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.eventhubs.AzureEventHubsAutoConfiguration; import com.azure.spring.cloud.autoconfigure.eventhubs.TestCheckpointStore; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsErrorHandler; import com.azure.spring.cloud.service.eventhubs.consumer.EventHubsRecordMessageListener; @@ -21,6 +20,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class EventProcessorUserAgentTests { @@ -45,8 +45,8 @@ void userAgentTest() { assertThat(context).hasSingleBean(EventProcessorClient.class); EventProcessorClientBuilder eventProcessorClientBuilder = context.getBean(EventProcessorClientBuilder.class); - EventHubClientBuilder eventHubClientBuilder = (EventHubClientBuilder) UserAgentTestUtil.getPrivateFieldValue(EventProcessorClientBuilder.class, "eventHubClientBuilder", eventProcessorClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(EventHubClientBuilder.class, "clientOptions", eventHubClientBuilder); + EventHubClientBuilder eventHubClientBuilder = (EventHubClientBuilder) getField(EventProcessorClientBuilder.class, "eventHubClientBuilder", eventProcessorClientBuilder); + ClientOptions options = (ClientOptions) getField(EventHubClientBuilder.class, "clientOptions", eventHubClientBuilder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_EVENT_HUBS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/ServiceBusUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/ServiceBusUserAgentTests.java index d588e85c82f6..bdab94fca87c 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/ServiceBusUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/ServiceBusUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.core.provider.connectionstring.StaticConnectionStringProvider; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusClientBuilderFactory; @@ -16,6 +15,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusUserAgentTests { @@ -35,7 +35,7 @@ void userAgentTest() { assertThat(context).hasSingleBean(StaticConnectionStringProvider.class); ServiceBusClientBuilder builder = context.getBean(ServiceBusClientBuilder.class); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusProcessorUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusProcessorUserAgentTests.java index 30527e68a6c7..59c3151338db 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusProcessorUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusProcessorUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusProcessorClientBuilderFactory; import com.azure.spring.cloud.service.servicebus.consumer.ServiceBusErrorHandler; @@ -17,6 +16,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusProcessorUserAgentTests { @@ -52,8 +52,8 @@ void userAgentTest(String... propertyValues) { assertThat(context).hasSingleBean(ServiceBusClientBuilder.ServiceBusProcessorClientBuilder.class); ServiceBusClientBuilder.ServiceBusProcessorClientBuilder processorClientBuilder = context.getBean(ServiceBusClientBuilder.ServiceBusProcessorClientBuilder.class); - ServiceBusClientBuilder builder = (ServiceBusClientBuilder) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.ServiceBusProcessorClientBuilder.class, "this$0", processorClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ServiceBusClientBuilder builder = (ServiceBusClientBuilder) getField(ServiceBusClientBuilder.ServiceBusProcessorClientBuilder.class, "this$0", processorClientBuilder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusReceiverUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusReceiverUserAgentTests.java index ce385a702950..f1e3cf229507 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusReceiverUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusReceiverUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusReceiverClientBuilderFactory; import org.junit.jupiter.api.Assertions; @@ -15,6 +14,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusReceiverUserAgentTests { @@ -48,8 +48,8 @@ void userAgentTest(String... propertyValues) { assertThat(context).hasSingleBean(ServiceBusClientBuilder.ServiceBusReceiverClientBuilder.class); ServiceBusClientBuilder.ServiceBusReceiverClientBuilder receiverClientBuilder = context.getBean(ServiceBusClientBuilder.ServiceBusReceiverClientBuilder.class); - ServiceBusClientBuilder builder = (ServiceBusClientBuilder) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.ServiceBusReceiverClientBuilder.class, "this$0", receiverClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ServiceBusClientBuilder builder = (ServiceBusClientBuilder) getField(ServiceBusClientBuilder.ServiceBusReceiverClientBuilder.class, "this$0", receiverClientBuilder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSenderUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSenderUserAgentTests.java index 011d58280abf..e8a0e6bbc4f3 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSenderUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSenderUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusSenderClientBuilderFactory; import org.junit.jupiter.api.Assertions; @@ -15,6 +14,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusSenderUserAgentTests { @@ -48,8 +48,8 @@ void userAgentTest(String... propertyValues) { assertThat(context).hasSingleBean(ServiceBusClientBuilder.ServiceBusSenderClientBuilder.class); ServiceBusClientBuilder.ServiceBusSenderClientBuilder serviceBusSenderClientBuilder = context.getBean(ServiceBusClientBuilder.ServiceBusSenderClientBuilder.class); - ServiceBusClientBuilder builder = (ServiceBusClientBuilder) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.ServiceBusSenderClientBuilder.class, "this$0", serviceBusSenderClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ServiceBusClientBuilder builder = (ServiceBusClientBuilder) getField(ServiceBusClientBuilder.ServiceBusSenderClientBuilder.class, "this$0", serviceBusSenderClientBuilder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionProcessorUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionProcessorUserAgentTests.java index 13eb94575ee8..190604a0cc90 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionProcessorUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionProcessorUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusSessionProcessorClientBuilderFactory; import com.azure.spring.cloud.service.servicebus.consumer.ServiceBusErrorHandler; @@ -17,6 +16,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusSessionProcessorUserAgentTests { @@ -54,8 +54,8 @@ void userAgentTest(String... propertyValues) { assertThat(context).hasSingleBean(ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder.class); ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder processorClientBuilder = context.getBean(ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder.class); - ServiceBusClientBuilder builder = (ServiceBusClientBuilder) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder.class, "this$0", processorClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ServiceBusClientBuilder builder = (ServiceBusClientBuilder) getField(ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder.class, "this$0", processorClientBuilder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionReceiverUserAgentTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionReceiverUserAgentTests.java index ff0fd587345d..78ea3e00fb55 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionReceiverUserAgentTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/amqp/servicebus/ServiceBusSessionReceiverUserAgentTests.java @@ -7,7 +7,6 @@ import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties; import com.azure.spring.cloud.autoconfigure.servicebus.AzureServiceBusAutoConfiguration; -import com.azure.spring.cloud.autoconfigure.useragent.util.UserAgentTestUtil; import com.azure.spring.cloud.core.implementation.util.AzureSpringIdentifier; import com.azure.spring.cloud.service.implementation.servicebus.factory.ServiceBusSessionReceiverClientBuilderFactory; import org.junit.jupiter.api.Assertions; @@ -15,6 +14,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; import static org.assertj.core.api.Assertions.assertThat; class ServiceBusSessionReceiverUserAgentTests { @@ -50,8 +50,8 @@ void userAgentTest(String... propertyValues) { assertThat(context).hasSingleBean(ServiceBusClientBuilder.ServiceBusSessionReceiverClientBuilder.class); ServiceBusClientBuilder.ServiceBusSessionReceiverClientBuilder receiverClientBuilder = context.getBean(ServiceBusClientBuilder.ServiceBusSessionReceiverClientBuilder.class); - ServiceBusClientBuilder builder = (ServiceBusClientBuilder) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.ServiceBusSessionReceiverClientBuilder.class, "this$0", receiverClientBuilder); - ClientOptions options = (ClientOptions) UserAgentTestUtil.getPrivateFieldValue(ServiceBusClientBuilder.class, "clientOptions", builder); + ServiceBusClientBuilder builder = (ServiceBusClientBuilder) getField(ServiceBusClientBuilder.ServiceBusSessionReceiverClientBuilder.class, "this$0", receiverClientBuilder); + ClientOptions options = (ClientOptions) getField(ServiceBusClientBuilder.class, "clientOptions", builder); Assertions.assertNotNull(options); Assertions.assertEquals(AzureSpringIdentifier.AZURE_SPRING_SERVICE_BUS, options.getApplicationId()); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/util/UserAgentTestUtil.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/util/UserAgentTestUtil.java index 65118504df44..99eee973c70a 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/util/UserAgentTestUtil.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/useragent/util/UserAgentTestUtil.java @@ -8,25 +8,15 @@ import com.azure.core.http.policy.HttpPipelinePolicy; import com.azure.core.http.policy.UserAgentPolicy; -import java.lang.reflect.Field; +import static com.azure.spring.cloud.core.implementation.util.ReflectionUtils.getField; public class UserAgentTestUtil { - public static Object getPrivateFieldValue(Class clazz, String fieldName, Object object) { - try { - Field field = clazz.getDeclaredField(fieldName); - field.setAccessible(true); - return field.get(object); - } catch (NoSuchFieldException | IllegalAccessException e) { - return null; - } - } - public static String getUserAgent(HttpPipeline pipeline) { for (int i = 0; i < pipeline.getPolicyCount(); i++) { HttpPipelinePolicy policy = pipeline.getPolicy(i); if (policy instanceof UserAgentPolicy) { - return (String) getPrivateFieldValue(UserAgentPolicy.class, "userAgent", policy); + return (String) getField(UserAgentPolicy.class, "userAgent", policy); } } return null; diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json new file mode 100644 index 000000000000..2c9f94ceedc2 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/aad/access-token-response.json @@ -0,0 +1,9 @@ +{ + "token_type": "Bearer", + "scope": "openid profile email", + "expires_in": 5139, + "ext_expires_in": 5139, + "access_token": "test_access_token_value", + "refresh_token": "test_refresh_token_value", + "id_token": "test_id_token_value" +} From 76054d725d77c8e6ea263a2096220656440d3986 Mon Sep 17 00:00:00 2001 From: Muyao Feng <92105726+Netyyyy@users.noreply.github.com> Date: Tue, 25 Oct 2022 15:36:26 +0800 Subject: [PATCH 03/14] Prepare spring cloud azure 4.4.1 release (#31707) * Update spring-cloud-azure related version manually * Update release version * update ChangeLog * update ChangeLog --- .../src/main/resources/revapi/revapi.json | 7 +- eng/jacoco-test-coverage/pom.xml | 68 +++++++-------- eng/versioning/version_client.txt | 84 +++++++++---------- .../spring-cloud-azure-dependencies/pom.xml | 2 +- sdk/spring/CHANGELOG.md | 5 +- sdk/spring/README.md | 4 +- .../CHANGELOG.md | 4 + .../pom.xml | 6 +- .../spring-cloud-azure-actuator/CHANGELOG.md | 4 + .../spring-cloud-azure-actuator/pom.xml | 2 +- .../CHANGELOG.md | 4 + .../spring-cloud-azure-autoconfigure/pom.xml | 14 ++-- .../spring-cloud-azure-core/CHANGELOG.md | 4 + sdk/spring/spring-cloud-azure-core/pom.xml | 2 +- .../pom.xml | 24 +++--- .../CHANGELOG.md | 4 + .../pom.xml | 4 +- .../spring-cloud-azure-service/CHANGELOG.md | 4 + sdk/spring/spring-cloud-azure-service/pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../spring-cloud-azure-starter-cosmos/pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 6 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 6 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 8 +- .../pom.xml | 4 +- .../pom.xml | 4 +- sdk/spring/spring-cloud-azure-starter/pom.xml | 4 +- .../CHANGELOG.md | 4 + .../pom.xml | 4 +- .../CHANGELOG.md | 4 + .../pom.xml | 8 +- .../CHANGELOG.md | 4 + .../pom.xml | 4 +- .../CHANGELOG.md | 4 + .../pom.xml | 8 +- .../CHANGELOG.md | 4 + .../spring-cloud-azure-trace-sleuth/pom.xml | 4 +- .../CHANGELOG.md | 4 + .../spring-integration-azure-core/pom.xml | 4 +- .../CHANGELOG.md | 4 + .../pom.xml | 8 +- .../CHANGELOG.md | 4 + .../pom.xml | 10 +-- .../CHANGELOG.md | 4 + .../pom.xml | 6 +- .../CHANGELOG.md | 4 + .../spring-messaging-azure-eventhubs/pom.xml | 6 +- .../CHANGELOG.md | 4 + .../spring-messaging-azure-servicebus/pom.xml | 6 +- .../CHANGELOG.md | 4 + .../pom.xml | 6 +- .../spring-messaging-azure/CHANGELOG.md | 4 + sdk/spring/spring-messaging-azure/pom.xml | 4 +- 67 files changed, 283 insertions(+), 199 deletions(-) diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json index c6d782def152..a7bbc6029789 100644 --- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json +++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json @@ -347,6 +347,11 @@ "annotation": "@org.springframework.boot.autoconfigure.condition.ConditionalOnProperty(value = {\"spring.cloud.azure.eventhubs.kafka.enabled\"}, havingValue = \"true\", matchIfMissing = true)", "justification": "To enable turn on/off the related auto-configurations manually." }, + { + "code": "java.method.added", + "new": "method void com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cOidcLoginConfigurer::(org.springframework.security.web.authentication.logout.LogoutSuccessHandler, org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver, org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient, org.springframework.boot.web.client.RestTemplateBuilder)", + "justification": "New method added to fix a bug." + }, { "code": "java.missing.newSuperType", "old": "class com.azure.messaging.eventhubs.EventData", @@ -510,4 +515,4 @@ ] } } -] \ No newline at end of file +] diff --git a/eng/jacoco-test-coverage/pom.xml b/eng/jacoco-test-coverage/pom.xml index ac62d208b9f8..64a596445fa0 100644 --- a/eng/jacoco-test-coverage/pom.xml +++ b/eng/jacoco-test-coverage/pom.xml @@ -465,172 +465,172 @@ com.azure.spring spring-cloud-azure-core - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure-storage-queue - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-storage-queue - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-keyvault - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-integration-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-integration-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-integration-storage-queue - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-stream-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-stream-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0 + 4.4.1 com.azure diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 358cc80d9c58..b24d4bedec59 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -174,48 +174,48 @@ com.azure.spring:azure-spring-cloud-appconfiguration-config;2.8.0;2.9.0-beta.1 com.azure.spring:azure-spring-cloud-feature-management-web;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-feature-management;2.7.0;2.8.0-beta.1 com.azure.spring:azure-spring-cloud-starter-appconfiguration-config;2.8.0;2.9.0-beta.1 -com.azure.spring:spring-cloud-azure-dependencies;4.3.0;4.4.0 -com.azure.spring:spring-messaging-azure;4.3.0;4.4.0 -com.azure.spring:spring-messaging-azure-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-messaging-azure-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-messaging-azure-storage-queue;4.3.0;4.4.0 -com.azure.spring:spring-integration-azure-core;4.3.0;4.4.0 -com.azure.spring:spring-integration-azure-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-integration-azure-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-integration-azure-storage-queue;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-core;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-actuator-autoconfigure;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-actuator;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-autoconfigure;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-resourcemanager;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-service;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-active-directory;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-active-directory-b2c;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-actuator;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-appconfiguration;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-cosmos;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-data-cosmos;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-keyvault;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-keyvault-certificates;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-keyvault-secrets;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-servicebus-jms;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-storage;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-storage-blob;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-storage-file-share;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-storage-queue;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-integration-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-integration-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-integration-storage-queue;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-stream-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter-stream-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-starter;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-stream-binder-eventhubs-core;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-stream-binder-eventhubs;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-stream-binder-servicebus-core;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-stream-binder-servicebus;4.3.0;4.4.0 -com.azure.spring:spring-cloud-azure-trace-sleuth;4.3.0;4.4.0 +com.azure.spring:spring-cloud-azure-dependencies;4.3.0;4.4.1 +com.azure.spring:spring-messaging-azure;4.3.0;4.4.1 +com.azure.spring:spring-messaging-azure-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-messaging-azure-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-messaging-azure-storage-queue;4.3.0;4.4.1 +com.azure.spring:spring-integration-azure-core;4.3.0;4.4.1 +com.azure.spring:spring-integration-azure-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-integration-azure-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-integration-azure-storage-queue;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-core;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-actuator-autoconfigure;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-actuator;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-autoconfigure;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-resourcemanager;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-service;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-active-directory;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-active-directory-b2c;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-actuator;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-appconfiguration;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-cosmos;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-data-cosmos;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-keyvault;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-keyvault-certificates;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-keyvault-secrets;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-servicebus-jms;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-storage;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-storage-blob;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-storage-file-share;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-storage-queue;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-integration-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-integration-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-integration-storage-queue;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-stream-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter-stream-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-starter;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-stream-binder-eventhubs-core;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-stream-binder-eventhubs;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-stream-binder-servicebus-core;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-stream-binder-servicebus;4.3.0;4.4.1 +com.azure.spring:spring-cloud-azure-trace-sleuth;4.3.0;4.4.1 com.azure.spring:spring-cloud-azure-native-configuration;4.0.0-beta.1;4.0.0-beta.2 com.azure.resourcemanager:azure-resourcemanager;2.19.0;2.20.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-appplatform;2.19.0;2.20.0-beta.1 diff --git a/sdk/boms/spring-cloud-azure-dependencies/pom.xml b/sdk/boms/spring-cloud-azure-dependencies/pom.xml index 67b293a0f599..8f494a1b39ac 100644 --- a/sdk/boms/spring-cloud-azure-dependencies/pom.xml +++ b/sdk/boms/spring-cloud-azure-dependencies/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-dependencies - 4.4.0 + 4.4.1 pom Spring Cloud Azure Dependencies diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 9bb2895aa2b3..f26a5975c665 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -1,6 +1,9 @@ # Release History -## 4.4.1 (Unreleased) +## 4.4.1 (2022-10-25) + +### Spring Cloud Azure Autoconfigure +This section includes changes in `spring-cloud-azure-autoconfigure` module. #### Bugs Fixed - Fix bug: Put a value into Collections.emptyMap(). [#31190](https://github.com/Azure/azure-sdk-for-java/issues/31190). diff --git a/sdk/spring/README.md b/sdk/spring/README.md index dc9176647aa8..8d32b79aa471 100644 --- a/sdk/spring/README.md +++ b/sdk/spring/README.md @@ -130,14 +130,14 @@ Current binder implementations include: If you’re a Maven user, add our BOM to your pom.xml `` section. This will allow you to not specify versions for any of the Maven dependencies and instead delegate versioning to the BOM. -[//]: # ({x-version-update-start;com.azure.spring:spring-cloud-azure-dependencies;dependency}) +[//]: # ({x-version-update-start;com.azure.spring:spring-cloud-azure-dependencies;current}) ```xml com.azure.spring spring-cloud-azure-dependencies - 4.4.0 + 4.4.1 pom import diff --git a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml index bbf7da1d58d7..f8fb68de8b8b 100644 --- a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-actuator-autoconfigure - 4.4.0 + 4.4.1 Spring Cloud Azure Actuator AutoConfigure Spring Cloud Azure Starter Actuator AutoConfigure @@ -43,12 +43,12 @@ com.azure.spring spring-cloud-azure-actuator - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-actuator/pom.xml b/sdk/spring/spring-cloud-azure-actuator/pom.xml index 2b1ed1a652a4..d5839f55f033 100644 --- a/sdk/spring/spring-cloud-azure-actuator/pom.xml +++ b/sdk/spring/spring-cloud-azure-actuator/pom.xml @@ -17,7 +17,7 @@ com.azure.spring spring-cloud-azure-actuator - 4.4.0 + 4.4.1 Spring Cloud Azure Actuator https://microsoft.github.io/spring-cloud-azure diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index 45636eba845d..bdc2fadd3fbe 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 Spring Cloud Azure AutoConfigure Spring Cloud Azure AutoConfigure @@ -37,20 +37,20 @@ com.azure.spring spring-cloud-azure-service - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0 + 4.4.1 true com.azure.spring spring-cloud-azure-trace-sleuth - 4.4.0 + 4.4.1 true @@ -59,7 +59,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0 + 4.4.1 true @@ -73,7 +73,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0 + 4.4.1 true @@ -81,7 +81,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0 + 4.4.1 true diff --git a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-core/pom.xml b/sdk/spring/spring-cloud-azure-core/pom.xml index 4c3346505b9f..cef54de1f3b9 100644 --- a/sdk/spring/spring-cloud-azure-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0 + 4.4.1 Spring Cloud Azure Core https://microsoft.github.io/spring-cloud-azure diff --git a/sdk/spring/spring-cloud-azure-integration-tests/pom.xml b/sdk/spring/spring-cloud-azure-integration-tests/pom.xml index b2e761382e1c..4c51a1e8aa4b 100644 --- a/sdk/spring/spring-cloud-azure-integration-tests/pom.xml +++ b/sdk/spring/spring-cloud-azure-integration-tests/pom.xml @@ -40,62 +40,62 @@ com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0 + 4.4.1 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml b/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml index 025d86bfccd2..86159e71ae99 100644 --- a/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml +++ b/sdk/spring/spring-cloud-azure-resourcemanager/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0 + 4.4.1 Spring Cloud Azure Resource Manager Spring Cloud Azure Resource Manager @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-service/pom.xml b/sdk/spring/spring-cloud-azure-service/pom.xml index 65c9b7e8c39a..82a7c0e55417 100644 --- a/sdk/spring/spring-cloud-azure-service/pom.xml +++ b/sdk/spring/spring-cloud-azure-service/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-service - 4.4.0 + 4.4.1 Spring Cloud Azure Service Spring Cloud Azure Service @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml b/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml index 91fdd3b0b0a7..d6d57374e9c5 100644 --- a/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-active-directory-b2c/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-active-directory-b2c - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Active Directory B2C Spring Cloud Azure Starter Active Directory B2C @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 org.springframework.security diff --git a/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml b/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml index a76485baa8cb..00e660f92177 100644 --- a/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-active-directory/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-active-directory - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Active Directory Spring Cloud Azure Starter Active Directory @@ -86,7 +86,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 org.springframework.security diff --git a/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml b/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml index 325921cb3657..072c72f4c4b5 100644 --- a/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-actuator/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-actuator - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Actuator Spring Cloud Azure Starter Actuator @@ -88,12 +88,12 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-actuator-autoconfigure - 4.4.0 + 4.4.1 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml b/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml index 502b8501be42..127031741df6 100644 --- a/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-appconfiguration/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-appconfiguration - 4.4.0 + 4.4.1 Spring Cloud Azure Starter App Configuration Spring Cloud Azure Starter App Configuration @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml b/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml index e957d9e2719c..49944cb8ea62 100644 --- a/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-cosmos/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-cosmos - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Cosmos DB Spring Cloud Azure Starter Cosmos DB @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml b/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml index a16fcf627620..0a11f442bf03 100644 --- a/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-data-cosmos/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-data-cosmos - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Data Cosmos DB Spring Cloud Azure Starter Data Cosmos DB @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml index 3fe24838357c..8263bb12aff9 100644 --- a/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-eventhubs - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Event Hubs Spring Cloud Azure Starter Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml index a67e98198dad..a04ca54e30f0 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-integration-eventhubs - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Integration Event Hubs Spring Cloud Azure Starter Integration Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 org.springframework.boot @@ -97,7 +97,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml index 568596beb86b..d07258862d69 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-integration-servicebus - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Integration Service Bus Spring Cloud Azure Starter Integration Service Bus @@ -89,7 +89,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 org.springframework.boot @@ -99,7 +99,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml b/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml index 8001d2932c8d..55292daa6328 100644 --- a/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-integration-storage-queue/pom.xml @@ -10,7 +10,7 @@ com.azure.spring spring-cloud-azure-starter-integration-storage-queue - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Integration Storage Queue Spring Cloud Azure Starter Integration Storage Queue @@ -92,7 +92,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 org.springframework.boot @@ -102,7 +102,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml index 19508a4c4b36..0ce92dfeee27 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault-certificates/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Key Vault Certificates Spring Cloud Azure Starter Key Vault Certificates @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml index 83e821ec6515..97def0ae741f 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault-secrets/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Key Vault Secrets Spring Cloud Azure Starter Key Vault Secrets @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml b/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml index 842e43c4ece6..37309a26566e 100644 --- a/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-keyvault/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-keyvault - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Key Vault Spring Cloud Azure Starter Key Vault @@ -88,12 +88,12 @@ com.azure.spring spring-cloud-azure-starter-keyvault-secrets - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-keyvault-certificates - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml index ca27d94ad19e..2b9d08528a05 100644 --- a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-servicebus-jms - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Service Bus JMS Spring Cloud Azure Starter Service Bus JMS @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml index 27fd2c6776f3..3bcff794394e 100644 --- a/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-servicebus - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Service Bus Spring Cloud Azure Starter Service Bus @@ -89,7 +89,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml index dadce704c74d..1da64c20765a 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-blob/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Storage Blob Spring Cloud Azure Starter Storage Blob @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml index 9955e99d4b94..4a506cf7f2a0 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-file-share/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Storage File Share Spring Cloud Azure Starter Storage File Share @@ -88,7 +88,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml index 73f021533125..a7eb5af021e2 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage-queue/pom.xml @@ -10,7 +10,7 @@ com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Storage Queue Spring Cloud Azure Starter Storage Queue @@ -92,7 +92,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-starter-storage/pom.xml b/sdk/spring/spring-cloud-azure-starter-storage/pom.xml index 5f17d784988c..514bf747dd6e 100644 --- a/sdk/spring/spring-cloud-azure-starter-storage/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-storage/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter-storage - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Storage Spring Cloud Azure Starter Storage @@ -88,19 +88,19 @@ com.azure.spring spring-cloud-azure-starter-storage-blob - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-file-share - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-starter-storage-queue - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml index 2fb68a16f8dd..a927cf1fc428 100644 --- a/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-stream-eventhubs/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-stream-eventhubs - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Stream Event Hubs Spring Cloud Azure Starter Stream Event Hubs @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml index 087cbdd163ed..c8bdad961a70 100644 --- a/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-stream-servicebus/pom.xml @@ -7,7 +7,7 @@ com.azure.spring spring-cloud-azure-starter-stream-servicebus - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Stream Service Bus Spring Cloud Azure Starter Stream Service Bus @@ -87,7 +87,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-starter/pom.xml b/sdk/spring/spring-cloud-azure-starter/pom.xml index 6ecf024a9544..d8c9361c5979 100644 --- a/sdk/spring/spring-cloud-azure-starter/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter/pom.xml @@ -6,7 +6,7 @@ com.azure.spring spring-cloud-azure-starter - 4.4.0 + 4.4.1 Spring Cloud Azure Starter Core starter, including auto-configuration support @@ -93,7 +93,7 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml index 8786d639d0ac..4cd9bf6f6e99 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0 + 4.4.1 Spring Cloud Azure Stream Binder Event Hubs Core Spring Cloud Azure Stream Binder Event Hubs Core @@ -49,7 +49,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml index 1202ae940a8a..a92b95d71c44 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-eventhubs - 4.4.0 + 4.4.1 Spring Cloud Azure Stream Binder Event Hubs Spring Cloud Azure Stream Binder Event Hubs @@ -37,12 +37,12 @@ com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-stream-binder-eventhubs-core - 4.4.0 + 4.4.1 @@ -60,7 +60,7 @@ com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml index 00784cb28435..1005efb5091d 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0 + 4.4.1 Spring Cloud Azure Stream Binder Service Bus Core Spring Cloud Azure Stream Binder Service Bus Core @@ -43,7 +43,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0 + 4.4.1 com.azure diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml index b18567a05de3..5a29cbb3377a 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus - 4.4.0 + 4.4.1 Spring Cloud Azure Stream Binder Service Bus Spring Cloud Azure Stream Binder Service Bus @@ -37,17 +37,17 @@ com.azure.spring spring-cloud-azure-stream-binder-servicebus-core - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-autoconfigure - 4.4.0 + 4.4.1 com.azure.spring spring-cloud-azure-resourcemanager - 4.4.0 + 4.4.1 org.springframework.boot diff --git a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml b/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml index 67728ff86565..2a3a47006749 100644 --- a/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml +++ b/sdk/spring/spring-cloud-azure-trace-sleuth/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-cloud-azure-trace-sleuth - 4.4.0 + 4.4.1 Spring Cloud Azure Trace on Sleuth https://microsoft.github.io/spring-cloud-azure @@ -36,7 +36,7 @@ com.azure.spring spring-cloud-azure-core - 4.4.0 + 4.4.1 org.springframework.cloud diff --git a/sdk/spring/spring-integration-azure-core/CHANGELOG.md b/sdk/spring/spring-integration-azure-core/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-integration-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-core/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-core/pom.xml b/sdk/spring/spring-integration-azure-core/pom.xml index a263ff5a9eb5..2b29fa26da75 100644 --- a/sdk/spring/spring-integration-azure-core/pom.xml +++ b/sdk/spring/spring-integration-azure-core/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 Spring Integration Azure Core Spring Integration Azure Core @@ -37,7 +37,7 @@ com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 org.springframework.integration diff --git a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-eventhubs/pom.xml b/sdk/spring/spring-integration-azure-eventhubs/pom.xml index 48a1e7a0a114..74a093c05db2 100644 --- a/sdk/spring/spring-integration-azure-eventhubs/pom.xml +++ b/sdk/spring/spring-integration-azure-eventhubs/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-eventhubs - 4.4.0 + 4.4.1 Spring Integration Azure Event Hubs Spring Integration Azure Event Hubs @@ -37,19 +37,19 @@ com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 test-jar test com.azure.spring spring-messaging-azure-eventhubs - 4.4.0 + 4.4.1 diff --git a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-servicebus/pom.xml b/sdk/spring/spring-integration-azure-servicebus/pom.xml index 5afc1b76bc02..6bea0aa7e4eb 100644 --- a/sdk/spring/spring-integration-azure-servicebus/pom.xml +++ b/sdk/spring/spring-integration-azure-servicebus/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-integration-azure-servicebus - 4.4.0 + 4.4.1 Spring Integration Azure Service Bus Spring Integration Azure Service Bus @@ -37,24 +37,24 @@ com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 test-jar test com.azure.spring spring-messaging-azure-servicebus - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure-servicebus - 4.4.0 + 4.4.1 test-jar test diff --git a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-integration-azure-storage-queue/pom.xml b/sdk/spring/spring-integration-azure-storage-queue/pom.xml index 1dc90dfa4e61..2b8d81580be2 100644 --- a/sdk/spring/spring-integration-azure-storage-queue/pom.xml +++ b/sdk/spring/spring-integration-azure-storage-queue/pom.xml @@ -13,7 +13,7 @@ com.azure.spring spring-integration-azure-storage-queue - 4.4.0 + 4.4.1 Spring Integration Azure Storage Queue Spring Integration Azure Storage Queue @@ -38,12 +38,12 @@ com.azure.spring spring-integration-azure-core - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure-storage-queue - 4.4.0 + 4.4.1 + 4.4.1 Spring Messaging Azure Event Hubs Spring Messaging Azure Event Hubs @@ -37,12 +37,12 @@ com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 test-jar test diff --git a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure-servicebus/pom.xml b/sdk/spring/spring-messaging-azure-servicebus/pom.xml index 8881ebc5c8b7..26f83bed7b7d 100644 --- a/sdk/spring/spring-messaging-azure-servicebus/pom.xml +++ b/sdk/spring/spring-messaging-azure-servicebus/pom.xml @@ -13,7 +13,7 @@ com.azure.spring spring-messaging-azure-servicebus - 4.4.0 + 4.4.1 Spring Messaging Azure Service Bus Spring Messaging Azure Service Bus @@ -38,12 +38,12 @@ com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 test-jar test diff --git a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md index 37d79fdc0d37..73b72291e51d 100644 --- a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure-storage-queue/pom.xml b/sdk/spring/spring-messaging-azure-storage-queue/pom.xml index 6f227de109ce..1edb55e578eb 100644 --- a/sdk/spring/spring-messaging-azure-storage-queue/pom.xml +++ b/sdk/spring/spring-messaging-azure-storage-queue/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-messaging-azure-storage-queue - 4.4.0 + 4.4.1 Spring Messaging Azure Storage Queue Spring Messaging Azure Storage Queue @@ -37,12 +37,12 @@ com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 test-jar test diff --git a/sdk/spring/spring-messaging-azure/CHANGELOG.md b/sdk/spring/spring-messaging-azure/CHANGELOG.md index 34b0b3b90621..9f86c8d1a69c 100644 --- a/sdk/spring/spring-messaging-azure/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure/CHANGELOG.md @@ -1,5 +1,9 @@ # Release History +## 4.4.1 (2022-10-25) + +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. + ## 4.4.0 (2022-09-26) ### Features Added diff --git a/sdk/spring/spring-messaging-azure/pom.xml b/sdk/spring/spring-messaging-azure/pom.xml index a6463e0e1626..ca86182d81ad 100644 --- a/sdk/spring/spring-messaging-azure/pom.xml +++ b/sdk/spring/spring-messaging-azure/pom.xml @@ -12,7 +12,7 @@ com.azure.spring spring-messaging-azure - 4.4.0 + 4.4.1 Spring Messaging Azure Spring Messaging Azure @@ -37,7 +37,7 @@ com.azure.spring spring-cloud-azure-service - 4.4.0 + 4.4.1 org.springframework From 8f889dfe58e13ced04c13c5716fd796667b59022 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Fri, 28 Oct 2022 15:19:17 +0800 Subject: [PATCH 04/14] fix scs sources cannot be appended to Kafka binder context (#31715) (#31806) --- sdk/spring/CHANGELOG.md | 1 + ...ingServicePropertiesBeanPostProcessor.java | 34 +++-- ...afkaBinderOAuth2AutoConfigurationTest.java | 56 +++++--- ...ervicePropertiesBeanPostProcessorTest.java | 121 ++++++++++++++++++ 4 files changed, 188 insertions(+), 24 deletions(-) create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessorTest.java diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index f26a5975c665..91e6f354513b 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -12,6 +12,7 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. - Fix bug: Duplicated "scope" parameter. [#31191](https://github.com/Azure/azure-sdk-for-java/issues/31191). - Fix bug: NimbusJwtDecoder still uses `RestTemplate()` instead `RestTemplateBuilder` [#31233](https://github.com/Azure/azure-sdk-for-java/issues/31233) - Fix bug: Proxy setting not work in Azure AD B2C web application [31593](https://github.com/Azure/azure-sdk-for-java/issues/31593) +- Fix bug: `spring.main.sources` configuration from Spring Cloud Stream Kafka binder cannot take effect. [#31715](https://github.com/Azure/azure-sdk-for-java/pull/31715) ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessor.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessor.java index 1862fb6ae2ac..8229b39f5ccd 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessor.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessor.java @@ -6,8 +6,10 @@ import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.cloud.stream.config.BinderProperties; import org.springframework.cloud.stream.config.BindingServiceProperties; +import org.springframework.util.StringUtils; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; /** @@ -28,7 +30,7 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro BindingServiceProperties bindingServiceProperties = (BindingServiceProperties) bean; if (bindingServiceProperties.getBinders().isEmpty()) { BinderProperties kafkaBinderSourceProperty = new BinderProperties(); - configureBinderSources(kafkaBinderSourceProperty, AzureKafkaSpringCloudStreamConfiguration.AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS); + configureBinderSources(readSpringMainPropertiesMap(kafkaBinderSourceProperty.getEnvironment())); Map kafkaBinderPropertyMap = new HashMap<>(); kafkaBinderPropertyMap.put(KAKFA_BINDER_DEFAULT_NAME, kafkaBinderSourceProperty); @@ -39,7 +41,7 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro if (entry.getKey() != null && entry.getValue() != null && (KAKFA_BINDER_TYPE.equalsIgnoreCase(entry.getValue().getType()) || KAKFA_BINDER_DEFAULT_NAME.equalsIgnoreCase(entry.getKey()))) { - configureBinderSources(entry.getValue(), buildKafkaBinderSources(entry.getValue())); + configureBinderSources(readSpringMainPropertiesMap(entry.getValue().getEnvironment())); } } } @@ -47,15 +49,31 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro return bean; } - private String buildKafkaBinderSources(BinderProperties binderProperties) { + void configureBinderSources(Map originalSources) { StringBuilder sources = new StringBuilder(AzureKafkaSpringCloudStreamConfiguration.AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS); - if (binderProperties.getEnvironment().get(SPRING_MAIN_SOURCES_PROPERTY) != null) { - sources.append("," + binderProperties.getEnvironment().get(SPRING_MAIN_SOURCES_PROPERTY)); + if (StringUtils.hasText((String) originalSources.get("sources"))) { + sources.append("," + originalSources.get("sources")); } - return sources.toString(); + originalSources.put("sources", sources.toString()); } - private void configureBinderSources(BinderProperties binderProperties, String sources) { - binderProperties.getEnvironment().put(SPRING_MAIN_SOURCES_PROPERTY, sources); + @SuppressWarnings("unchecked") + Map readSpringMainPropertiesMap(Map map) { + if (map.containsKey("spring")) { + Map spring = (Map) map.get("spring"); + if (spring.containsKey("main")) { + return (Map) spring.get("main"); + } else { + LinkedHashMap main = new LinkedHashMap<>(); + spring.put("main", main); + return main; + } + } else { + Map main = new LinkedHashMap<>(); + Map spring = new LinkedHashMap<>(); + spring.put("main", main); + map.put("spring", spring); + return main; + } } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/AzureEventHubsKafkaBinderOAuth2AutoConfigurationTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/AzureEventHubsKafkaBinderOAuth2AutoConfigurationTest.java index 278df9dfaf34..0cee3fb45b4b 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/AzureEventHubsKafkaBinderOAuth2AutoConfigurationTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/AzureEventHubsKafkaBinderOAuth2AutoConfigurationTest.java @@ -2,13 +2,14 @@ // Licensed under the MIT License. package com.azure.spring.cloud.autoconfigure.kafka; +import java.util.Map; + import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.cloud.stream.binder.kafka.config.KafkaBinderConfiguration; import org.springframework.cloud.stream.config.BinderFactoryAutoConfiguration; -import org.springframework.cloud.stream.config.BinderProperties; import org.springframework.cloud.stream.config.BindingServiceProperties; import org.springframework.context.support.ConversionServiceFactoryBean; import org.springframework.integration.support.utils.IntegrationUtils; @@ -28,6 +29,7 @@ class AzureEventHubsKafkaBinderOAuth2AutoConfigurationTest { // Required by the init method of BindingServiceProperties .withBean(IntegrationUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME, ConversionServiceFactoryBean.class, ConversionServiceFactoryBean::new); + private final BindingServicePropertiesBeanPostProcessor bpp = new BindingServicePropertiesBeanPostProcessor(); @Test void shouldNotConfigureWithoutKafkaBinderConfigurationClass() { @@ -69,6 +71,39 @@ void shouldConfigureWhenBinderNameSpecified() { assertThat(context).hasSingleBean(BindingServiceProperties.class); testBinderSources(context.getBean(BindingServiceProperties.class), "kafka", AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS); + assertEquals("value", context.getBean(BindingServiceProperties.class).getBinders().get("kafka").getEnvironment().get("key")); + }); + } + + @Test + @SuppressWarnings("unchecked") + void shouldConfigureWhenOtherSpringEnvironmentSpecified() { + this.contextRunner + .withPropertyValues("spring.cloud.stream.binders.kafka.environment.spring.profiles.active=value") + .run(context -> { + assertThat(context).hasSingleBean(AzureEventHubsKafkaBinderOAuth2AutoConfiguration.class); + assertThat(context).hasSingleBean(BindingServicePropertiesBeanPostProcessor.class); + assertThat(context).hasSingleBean(BindingServiceProperties.class); + + testBinderSources(context.getBean(BindingServiceProperties.class), "kafka", AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS); + assertEquals("value", ((Map>) context.getBean(BindingServiceProperties.class).getBinders().get("kafka").getEnvironment().get("spring")) + .get("profiles").get("active")); + }); + } + + @Test + @SuppressWarnings("unchecked") + void shouldConfigureWhenOtherSpringMainEnvironmentSpecified() { + this.contextRunner + .withPropertyValues("spring.cloud.stream.binders.kafka.environment.spring.main.banner-mode=console") + .run(context -> { + assertThat(context).hasSingleBean(AzureEventHubsKafkaBinderOAuth2AutoConfiguration.class); + assertThat(context).hasSingleBean(BindingServicePropertiesBeanPostProcessor.class); + assertThat(context).hasSingleBean(BindingServiceProperties.class); + + testBinderSources(context.getBean(BindingServiceProperties.class), "kafka", AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS); + assertEquals("console", ((Map>) context.getBean(BindingServiceProperties.class).getBinders().get("kafka").getEnvironment().get("spring")) + .get("main").get("banner-mode")); }); } @@ -107,32 +142,21 @@ void shouldConfigureWithMultipleBinders() { @Test void shouldAppendOriginalSources() { - - new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(AzureEventHubsKafkaBinderOAuth2AutoConfiguration.class)) - .withBean(IntegrationUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME, ConversionServiceFactoryBean.class, - ConversionServiceFactoryBean::new) - .withBean(BindingServiceProperties.class, () -> { - BindingServiceProperties bindingServiceProperties = new BindingServiceProperties(); - BinderProperties kafkaBinderSourceProperty = new BinderProperties(); - kafkaBinderSourceProperty.getEnvironment().put(SPRING_MAIN_SOURCES_PROPERTY, "test"); - bindingServiceProperties.getBinders().put("kafka", kafkaBinderSourceProperty); - return bindingServiceProperties; - }) + this.contextRunner + .withPropertyValues("spring.cloud.stream.binders.kafka.environment.spring.main.sources=value") .run(context -> { assertThat(context).hasSingleBean(AzureEventHubsKafkaBinderOAuth2AutoConfiguration.class); assertThat(context).hasSingleBean(BindingServicePropertiesBeanPostProcessor.class); assertThat(context).hasSingleBean(BindingServiceProperties.class); - testBinderSources(context.getBean(BindingServiceProperties.class), "kafka", AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS + ",test"); + testBinderSources(context.getBean(BindingServiceProperties.class), "kafka", AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS + ",value"); }); } private void testBinderSources(BindingServiceProperties bindingServiceProperties, String binderName, String binderSources) { assertFalse(bindingServiceProperties.getBinders().isEmpty()); assertNotNull(bindingServiceProperties.getBinders().get(binderName)); - assertEquals(binderSources, - bindingServiceProperties.getBinders().get(binderName).getEnvironment().get(SPRING_MAIN_SOURCES_PROPERTY)); + assertEquals(binderSources, bpp.readSpringMainPropertiesMap(bindingServiceProperties.getBinders().get(binderName).getEnvironment()).get("sources")); } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessorTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessorTest.java new file mode 100644 index 000000000000..13e2432c584f --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/kafka/BindingServicePropertiesBeanPostProcessorTest.java @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.spring.cloud.autoconfigure.kafka; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import org.springframework.cloud.stream.config.BinderProperties; +import org.springframework.cloud.stream.config.BindingServiceProperties; +import org.springframework.util.StringUtils; + +import static com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +@SuppressWarnings("unchecked") +class BindingServicePropertiesBeanPostProcessorTest { + + private final BindingServicePropertiesBeanPostProcessor bpp = new BindingServicePropertiesBeanPostProcessor(); + + @Test + void testReadSpringMainPropertiesMapWithoutOriginalValues() { + Map env = new LinkedHashMap<>(); + Map mainPropertiesMap = buildSpringMainPropertiesMap(env, null, null, null); + assertSame(mainPropertiesMap, ((Map) env.get("spring")).get("main")); + } + + @Test + void testReadSpringMainPropertiesMapWithSpringProp() { + Map env = new LinkedHashMap<>(); + Map mainPropertiesMap = buildSpringMainPropertiesMap(env, "profiles", "active", "dev"); + + assertEquals("dev", ((Map>) env.get("spring")).get("profiles").get("active")); + assertSame(mainPropertiesMap, ((Map) env.get("spring")).get("main")); + } + + @Test + void testReadSpringMainPropertiesMapWithMainProp() { + Map env = new LinkedHashMap<>(); + Map mainPropertiesMap = buildSpringMainPropertiesMap(env, "main", "banner-mode", "test"); + + assertEquals("test", ((Map>) env.get("spring")).get("main").get("banner-mode")); + assertSame(mainPropertiesMap, ((Map) env.get("spring")).get("main")); + } + + @Test + void testReadSpringMainPropertiesMapWithSourcesProp() { + Map env = new LinkedHashMap<>(); + Map mainPropertiesMap = buildSpringMainPropertiesMap(env, "main", "sources", "test"); + + assertEquals("test", ((Map>) env.get("spring")).get("main").get("sources")); + assertSame(mainPropertiesMap, ((Map) env.get("spring")).get("main")); + } + + @Test + void testConfigureBinderSources() { + Map env = new LinkedHashMap<>(); + Map mainPropertiesMap = buildSpringMainPropertiesMap(env, "main", "sources", "test"); + bpp.configureBinderSources(mainPropertiesMap); + assertEquals(AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS + ",test", ((Map>) env.get("spring")).get("main").get("sources")); + + env.clear(); + mainPropertiesMap = buildSpringMainPropertiesMap(env, "main", "profiles", "active"); + bpp.configureBinderSources(mainPropertiesMap); + assertEquals(AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS, ((Map>) env.get("spring")).get("main").get("sources")); + } + + @Test + void testBindKafkaByDefault() { + BindingServiceProperties bindingServiceProperties = new BindingServiceProperties(); + bpp.postProcessBeforeInitialization(bindingServiceProperties, null); + Map env = bindingServiceProperties.getBinders().get("kafka") + .getEnvironment(); + assertEquals(AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS, ((Map>) env.get("spring")).get("main").get("sources")); + + } + + @Test + void testBindKafkaByName() { + BinderProperties binderProperties = new BinderProperties(); + Map binders = new HashMap<>(); + binders.put("kafka", binderProperties); + BindingServiceProperties bindingServiceProperties = new BindingServiceProperties(); + bindingServiceProperties.setBinders(binders); + + bpp.postProcessBeforeInitialization(bindingServiceProperties, null); + Map env = bindingServiceProperties.getBinders().get("kafka") + .getEnvironment(); + assertEquals(AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS, ((Map>) env.get("spring")).get("main").get("sources")); + } + + @Test + void testBindKafkaByType() { + BinderProperties binderProperties = new BinderProperties(); + Map binders = new HashMap<>(); + binders.put("test", binderProperties); + binderProperties.setType("kafka"); + BindingServiceProperties bindingServiceProperties = new BindingServiceProperties(); + bindingServiceProperties.setBinders(binders); + + bpp.postProcessBeforeInitialization(bindingServiceProperties, null); + Map env = bindingServiceProperties.getBinders().get("test") + .getEnvironment(); + assertEquals(AZURE_KAFKA_SPRING_CLOUD_STREAM_CONFIGURATION_CLASS, ((Map>) env.get("spring")).get("main").get("sources")); + } + + private Map buildSpringMainPropertiesMap(Map env, String secondProperty, String thirdProperty, String value) { + if (StringUtils.hasText(secondProperty)) { + Map second = new LinkedHashMap<>(); + second.put(thirdProperty, value); + Map first = new LinkedHashMap<>(); + first.put(secondProperty, second); + env.put("spring", first); + } + return bpp.readSpringMainPropertiesMap(env); + } + +} From d06fedd8be6667bd32b54b682adcfc2983d84c41 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 31 Oct 2022 09:09:21 +0800 Subject: [PATCH 05/14] Fix #31716. NoClassDefFoundError. (#31799) * Fix #31716. NoClassDefFoundError. * Make UserPrincipalManager#getRoles more robust. --- sdk/spring/CHANGELOG.md | 6 ++- .../aad/filter/UserPrincipalManager.java | 31 ++++++++---- .../aad/filter/UserPrincipalManagerTests.java | 50 +++++++++++++++---- 3 files changed, 65 insertions(+), 22 deletions(-) diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 91e6f354513b..566c09d4db62 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -11,10 +11,12 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module. - Fix bug: RestOperations is not well configured when jwkResolver is null. [#31218](https://github.com/Azure/azure-sdk-for-java/issues/31218). - Fix bug: Duplicated "scope" parameter. [#31191](https://github.com/Azure/azure-sdk-for-java/issues/31191). - Fix bug: NimbusJwtDecoder still uses `RestTemplate()` instead `RestTemplateBuilder` [#31233](https://github.com/Azure/azure-sdk-for-java/issues/31233) -- Fix bug: Proxy setting not work in Azure AD B2C web application [31593](https://github.com/Azure/azure-sdk-for-java/issues/31593) +- Fix bug: Proxy setting not work in Azure AD B2C web application. [31593](https://github.com/Azure/azure-sdk-for-java/issues/31593) +- Fix Bug: NoClassDefFoundError for JSONArray. [31716](https://github.com/Azure/azure-sdk-for-java/issues/31716) - Fix bug: `spring.main.sources` configuration from Spring Cloud Stream Kafka binder cannot take effect. [#31715](https://github.com/Azure/azure-sdk-for-java/pull/31715) + ## 4.4.0 (2022-09-26) Upgrade Spring Boot dependencies version to 2.7.3 and Spring Cloud dependencies version to 2021.0.3 Upgrade Spring Boot dependencies version to 2.7.2 and Spring Cloud dependencies version to 2021.0.3. @@ -472,7 +474,7 @@ This section includes changes in the `spring-cloud-azure-autoconfigure` module. * Property name "spring.cloud.azure.active-directory.graph-base-uri" changed to "spring.cloud.azure.active-directory.profile.environment.microsoft-graph-endpoint". * Property name "spring.cloud.azure.active-directory.graph-membership-uri" changed to "spring.cloud.azure.active-directory.profile.environment.microsoft-graph-endpoint" and "spring.cloud.azure.active-directory.user-group.use-transitive-members". - Change AAD B2C configuration properties to use the namespace for credential and environment properties [#25799](https://github.com/Azure/azure-sdk-for-java/pull/25799). -- Change Event Hubs processor configuration properties `spring.cloud.azure.eventhbs.processor.partition-ownership-expiration-interval` to `spring.cloud.azure.eventhbs.processor.load-balancing.partition-ownership-expiration-interval` [#25851](https://github.com/Azure/azure-sdk-for-java/pull/25851). +- Change Event Hubs processor configuration properties `spring.cloud.azure.eventhubs.processor.partition-ownership-expiration-interval` to `spring.cloud.azure.eventhubs.processor.load-balancing.partition-ownership-expiration-interval` [#25851](https://github.com/Azure/azure-sdk-for-java/pull/25851). - Change Event Hubs configuration properties `spring.cloud.azure.eventhubs.fqdn` to `spring.cloud.azure.eventhubs.fully-qualified-namespace` [#25851](https://github.com/Azure/azure-sdk-for-java/pull/25851). - Rename all `*CP` classes to `*ConfigurationProperties` [#26209](https://github.com/Azure/azure-sdk-for-java/pull/26209). diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManager.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManager.java index a4772a8c2490..a3d2b1a9a4ed 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManager.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManager.java @@ -16,7 +16,6 @@ import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; -import com.nimbusds.jose.shaded.json.JSONArray; import com.nimbusds.jose.util.ResourceRetriever; import com.nimbusds.jwt.JWT; import com.nimbusds.jwt.JWTClaimsSet; @@ -31,12 +30,13 @@ import java.net.MalformedURLException; import java.net.URL; import java.text.ParseException; -import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * A user principal manager to load user info from JWT. @@ -149,17 +149,28 @@ public UserPrincipal buildUserPrincipal(String aadIssuedBearerToken) throws Pars final JWTClaimsSet jwtClaimsSet = validator.process(aadIssuedBearerToken, null); validator.getJWTClaimsSetVerifier().verify(jwtClaimsSet, null); UserPrincipal userPrincipal = new UserPrincipal(aadIssuedBearerToken, jwsObject, jwtClaimsSet); - Set roles = Optional.of(userPrincipal) - .map(p -> p.getClaim(AadJwtClaimNames.ROLES)) - .map(JSONArray.class::cast) - .map(Collection::stream) - .orElseGet(Stream::empty) - .map(Object::toString) - .collect(Collectors.toSet()); - userPrincipal.setRoles(roles); + userPrincipal.setRoles(getRoles(jwtClaimsSet)); return userPrincipal; } + Set getRoles(JWTClaimsSet set) { + if (set == null) { + return Collections.emptySet(); + } + Object rolesClaim = set.getClaim(AadJwtClaimNames.ROLES); + if (rolesClaim == null) { + return Collections.emptySet(); + } + if (rolesClaim instanceof Iterable) { + return StreamSupport.stream(((Iterable) rolesClaim).spliterator(), false) + .map(Object::toString) + .collect(Collectors.toSet()); + } + return Stream.of(rolesClaim) + .map(Object::toString) + .collect(Collectors.toSet()); + } + /** * Whether the token was issued by AAD. * diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManagerTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManagerTests.java index 8c4c4f0482ef..7f2feaa60c4d 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManagerTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/filter/UserPrincipalManagerTests.java @@ -7,6 +7,7 @@ import com.nimbusds.jose.jwk.JWKSet; import com.nimbusds.jose.jwk.source.ImmutableJWKSet; import com.nimbusds.jose.proc.SecurityContext; +import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.BadJWTException; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -19,10 +20,17 @@ import java.nio.file.Paths; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class UserPrincipalManagerTests { @@ -33,8 +41,7 @@ class UserPrincipalManagerTests { static void setupClass() throws Exception { final X509Certificate cert = (X509Certificate) CertificateFactory.getInstance("X.509") .generateCertificate(Files.newInputStream(Paths.get("src/test/resources/aad/test-public-key.txt"))); - immutableJWKSet = new ImmutableJWKSet<>(new JWKSet(JWK.parse( - cert))); + immutableJWKSet = new ImmutableJWKSet<>(new JWKSet(JWK.parse(cert))); } private UserPrincipalManager userPrincipalManager; @@ -44,8 +51,7 @@ static void setupClass() throws Exception { void testAlgIsTakenFromJWT() throws Exception { userPrincipalManager = new UserPrincipalManager(immutableJWKSet); final UserPrincipal userPrincipal = userPrincipalManager.buildUserPrincipal( - new String(Files.readAllBytes( - Paths.get("src/test/resources/aad/jwt-signed.txt")), StandardCharsets.UTF_8)); + readFileToString("src/test/resources/aad/jwt-signed.txt")); assertThat(userPrincipal).isNotNull().extracting(UserPrincipal::getIssuer, UserPrincipal::getSubject) .containsExactly("https://sts.windows.net/test", "test@example.com"); } @@ -73,14 +79,38 @@ void nullIssuer() { .isInstanceOf(BadJWTException.class); } - private String readJwtValidIssuerTxt() throws IOException { - return new String(Files.readAllBytes( - Paths.get("src/test/resources/aad/jwt-null-issuer.txt")), StandardCharsets.UTF_8); + @Test + void getRolesTest() { + rolesExtractedAsExpected(null, new ArrayList<>()); + rolesExtractedAsExpected("role1", Arrays.asList("role1")); + rolesExtractedAsExpected(Arrays.asList("role1", "role2"), Arrays.asList("role1", "role2")); + rolesExtractedAsExpected(new HashSet<>(Arrays.asList("role1", "role2")), Arrays.asList("role1", "role2")); + } + + private void rolesExtractedAsExpected(Object rolesClaimValue, Collection expected) { + JWTClaimsSet set = new JWTClaimsSet.Builder() + .claim("roles", rolesClaimValue) + .build(); + Set actual = new UserPrincipalManager(null).getRoles(set); + assertEquals(expected.size(), actual.size()); + assertTrue(expected.containsAll(actual)); + assertTrue(actual.containsAll(expected)); + } + + private String readJwtValidIssuerTxt() { + return readFileToString("src/test/resources/aad/jwt-null-issuer.txt"); + } + + private static Stream readJwtValidIssuerTxtStream() { + return Stream.of(readFileToString("src/test/resources/aad/jwt-valid-issuer.txt")); } - private static Stream readJwtValidIssuerTxtStream() throws IOException { - return Stream.of(new String(Files.readAllBytes( - Paths.get("src/test/resources/aad/jwt-valid-issuer.txt")), StandardCharsets.UTF_8)); + private static String readFileToString(String path) { + try { + return new String(Files.readAllBytes(Paths.get(path)), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new IllegalStateException(e); + } } } From 87caddfe8c06aaf471d9ee72428a6ac21f1d2e14 Mon Sep 17 00:00:00 2001 From: Muyao Date: Mon, 31 Oct 2022 14:02:45 +0800 Subject: [PATCH 06/14] update CHANGELOG --- sdk/spring/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 566c09d4db62..2ddad528336c 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.4.1 (2022-10-25) +## 4.4.1 (2022-10-31) ### Spring Cloud Azure Autoconfigure This section includes changes in `spring-cloud-azure-autoconfigure` module. From 97238712b28c6b79092f5e136897df85b3109d61 Mon Sep 17 00:00:00 2001 From: Muyao Date: Mon, 31 Oct 2022 14:06:50 +0800 Subject: [PATCH 07/14] update CHANGELOG --- .../spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-core/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-service/CHANGELOG.md | 2 +- .../CHANGELOG.md | 2 +- .../spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md | 2 +- .../CHANGELOG.md | 2 +- .../spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md | 2 +- sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md | 2 +- sdk/spring/spring-integration-azure-core/CHANGELOG.md | 2 +- sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md | 2 +- sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md | 2 +- sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md | 2 +- sdk/spring/spring-messaging-azure-eventhubs/CHANGELOG.md | 2 +- sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md | 2 +- sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md | 2 +- sdk/spring/spring-messaging-azure/CHANGELOG.md | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator-autoconfigure/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-actuator/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-core/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-resourcemanager/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-cloud-azure-service/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-service/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs-core/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-eventhubs/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus-core/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-stream-binder-servicebus/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-trace-sleuth/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-integration-azure-core/CHANGELOG.md b/sdk/spring/spring-integration-azure-core/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-integration-azure-core/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-core/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-eventhubs/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-servicebus/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-integration-azure-storage-queue/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-messaging-azure-eventhubs/CHANGELOG.md b/sdk/spring/spring-messaging-azure-eventhubs/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-messaging-azure-eventhubs/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-eventhubs/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-servicebus/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md index 73b72291e51d..1c58690525a8 100644 --- a/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure-storage-queue/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) diff --git a/sdk/spring/spring-messaging-azure/CHANGELOG.md b/sdk/spring/spring-messaging-azure/CHANGELOG.md index 9f86c8d1a69c..a709c5bc492e 100644 --- a/sdk/spring/spring-messaging-azure/CHANGELOG.md +++ b/sdk/spring/spring-messaging-azure/CHANGELOG.md @@ -2,7 +2,7 @@ ## 4.4.1 (2022-10-25) -Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/48406c74d1af85facb324d65bf4434a22ad42754/sdk/spring/CHANGELOG.md#441-2022-10-25) for more details. +Please refer to [CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/blob/87caddfe8c06aaf471d9ee72428a6ac21f1d2e14/sdk/spring/CHANGELOG.md#441-2022-10-31) for more details. ## 4.4.0 (2022-09-26) From 7a0c347812867d19fdd9298733f65141c3d76c81 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 12:43:07 +0800 Subject: [PATCH 08/14] code format --- .../AadOAuth2ClientConfiguration.java | 56 +++++++++---------- .../jackson/SerializerUtils.java | 4 +- ...zationCodeGrantRequestEntityConverter.java | 6 +- .../aadb2c/AadB2cOidcLoginConfigurer.java | 16 +++--- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java index a75a0953a428..710994e72182 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java @@ -101,8 +101,8 @@ public OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository() { @Conditional(ClientCertificatePropertiesCondition.class) OAuth2ClientAuthenticationJwkResolver oAuth2ClientAuthenticationJwkResolver(AadAuthenticationProperties properties) { return new AadOAuth2ClientAuthenticationJwkResolver( - properties.getCredential().getClientCertificatePath(), - properties.getCredential().getClientCertificatePassword()); + properties.getCredential().getClientCertificatePath(), + properties.getCredential().getClientCertificatePassword()); } /** @@ -118,27 +118,27 @@ OAuth2ClientAuthenticationJwkResolver oAuth2ClientAuthenticationJwkResolver(AadA @Bean @ConditionalOnMissingBean OAuth2AuthorizedClientManager authorizedClientManager( - ClientRegistrationRepository clientRegistrations, - OAuth2AuthorizedClientRepository authorizedClients, - RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, - JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, - ObjectProvider jwkResolvers) { + ClientRegistrationRepository clientRegistrations, + OAuth2AuthorizedClientRepository authorizedClients, + RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, + JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, + ObjectProvider jwkResolvers) { DefaultOAuth2AuthorizedClientManager manager = - new DefaultOAuth2AuthorizedClientManager(clientRegistrations, authorizedClients); + new DefaultOAuth2AuthorizedClientManager(clientRegistrations, authorizedClients); OAuth2ClientAuthenticationJwkResolver jwkResolver = jwkResolvers.getIfUnique(); // @formatter:off OAuth2AuthorizedClientProvider providers = - OAuth2AuthorizedClientProviderBuilder - .builder() - .authorizationCode() - .clientCredentials(builder -> - clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) - .password(builder -> passwordGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) - .provider(refreshTokenProvider) - .provider(jwtBearerProvider) - .provider(azureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients)) - .build(); + OAuth2AuthorizedClientProviderBuilder + .builder() + .authorizationCode() + .clientCredentials(builder -> + clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) + .password(builder -> passwordGrantBuilderAccessTokenResponseClientCustomizer(builder, jwkResolver)) + .provider(refreshTokenProvider) + .provider(jwtBearerProvider) + .provider(azureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients)) + .build(); // @formatter:on manager.setAuthorizedClientProvider(providers); return manager; @@ -147,7 +147,7 @@ OAuth2AuthorizedClientManager authorizedClientManager( @Bean @ConditionalOnMissingBean JwtBearerOAuth2AuthorizedClientProvider azureAdJwtBearerProvider( - ObjectProvider resolvers) { + ObjectProvider resolvers) { JwtBearerOAuth2AuthorizedClientProvider provider = new JwtBearerOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); DefaultJwtBearerTokenResponseClient client = new DefaultJwtBearerTokenResponseClient(); @@ -164,7 +164,7 @@ JwtBearerOAuth2AuthorizedClientProvider azureAdJwtBearerProvider( @Bean @ConditionalOnMissingBean RefreshTokenOAuth2AuthorizedClientProvider azureRefreshTokenProvider( - ObjectProvider resolvers) { + ObjectProvider resolvers) { RefreshTokenOAuth2AuthorizedClientProvider provider = new RefreshTokenOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); DefaultRefreshTokenTokenResponseClient client = new DefaultRefreshTokenTokenResponseClient(); @@ -190,13 +190,13 @@ RefreshTokenOAuth2AuthorizedClientProvider azureRefreshTokenProvider( JwtDecoderFactory azureAdJwtDecoderFactory(AadAuthenticationProperties properties) { AadProfileProperties profile = properties.getProfile(); AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints( - profile.getEnvironment().getActiveDirectoryEndpoint(), profile.getTenantId()); + profile.getEnvironment().getActiveDirectoryEndpoint(), profile.getTenantId()); return new AadOidcIdTokenDecoderFactory(endpoints.getJwkSetEndpoint(), createRestTemplate(restTemplateBuilder)); } private void passwordGrantBuilderAccessTokenResponseClientCustomizer( - OAuth2AuthorizedClientProviderBuilder.PasswordGrantBuilder builder, - OAuth2ClientAuthenticationJwkResolver resolver) { + OAuth2AuthorizedClientProviderBuilder.PasswordGrantBuilder builder, + OAuth2ClientAuthenticationJwkResolver resolver) { DefaultPasswordTokenResponseClient client = new DefaultPasswordTokenResponseClient(); client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { @@ -208,13 +208,13 @@ private void passwordGrantBuilderAccessTokenResponseClientCustomizer( } private void clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer( - OAuth2AuthorizedClientProviderBuilder.ClientCredentialsGrantBuilder builder, - OAuth2ClientAuthenticationJwkResolver resolver) { + OAuth2AuthorizedClientProviderBuilder.ClientCredentialsGrantBuilder builder, + OAuth2ClientAuthenticationJwkResolver resolver) { DefaultClientCredentialsTokenResponseClient client = new DefaultClientCredentialsTokenResponseClient(); client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { OAuth2ClientCredentialsGrantRequestEntityConverter converter = - new OAuth2ClientCredentialsGrantRequestEntityConverter(); + new OAuth2ClientCredentialsGrantRequestEntityConverter(); converter.addParametersConverter(new AadJwtClientAuthenticationParametersConverter<>(resolver::resolve)); client.setRequestEntityConverter(converter); } @@ -222,8 +222,8 @@ private void clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer( } private AadAzureDelegatedOAuth2AuthorizedClientProvider azureDelegatedOAuth2AuthorizedClientProvider( - RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, - OAuth2AuthorizedClientRepository authorizedClients) { + RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, + OAuth2AuthorizedClientRepository authorizedClients) { return new AadAzureDelegatedOAuth2AuthorizedClientProvider(refreshTokenProvider, authorizedClients); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java index f2647ce320e2..16616fafb63b 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/jackson/SerializerUtils.java @@ -16,8 +16,8 @@ public final class SerializerUtils { private static final ObjectMapper OBJECT_MAPPER; private static final TypeReference> TYPE_REFERENCE = - new TypeReference>() { - }; + new TypeReference>() { + }; static { OBJECT_MAPPER = new ObjectMapper(); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java index 93cc00980652..929c79888183 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -17,10 +17,10 @@ * When using "auth-code" in AAD and AAD B2C, it's used to expand head and body parameters of the request. */ public abstract class AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter - extends OAuth2AuthorizationCodeGrantRequestEntityConverter { + extends OAuth2AuthorizationCodeGrantRequestEntityConverter { private static final MultiValueMap EMPTY_MULTI_VALUE_MAP = - new MultiValueMapAdapter<>(Collections.emptyMap()); + new MultiValueMapAdapter<>(Collections.emptyMap()); protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { addHeadersConverter(this::getHttpHeaders); @@ -28,7 +28,7 @@ protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { } private static final MultiValueMap EMPTY_MULTI_VALUE_MAP = - new MultiValueMapAdapter<>(Collections.emptyMap()); + new MultiValueMapAdapter<>(Collections.emptyMap()); protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { addHeadersConverter(this::getHttpHeaders); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java index 348d299ff6c5..e9dd83ca4e7e 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java @@ -81,14 +81,14 @@ public AadB2cOidcLoginConfigurer(LogoutSuccessHandler handler, public void init(HttpSecurity http) throws Exception { // @formatter:off http.logout() - .logoutSuccessHandler(handler) - .and() - .oauth2Login() - .authorizationEndpoint() - .authorizationRequestResolver(resolver) - .and() - .tokenEndpoint() - .accessTokenResponseClient(accessTokenResponseClient()); + .logoutSuccessHandler(handler) + .and() + .oauth2Login() + .authorizationEndpoint() + .authorizationRequestResolver(resolver) + .and() + .tokenEndpoint() + .accessTokenResponseClient(accessTokenResponseClient()); // @formatter:on } From 310b2599dca4199c3fb0dd721f8d7e3267781f7a Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 13:10:41 +0800 Subject: [PATCH 09/14] revert some changes --- .../AadOAuth2ClientConfiguration.java | 24 +++--- .../AadResourceServerConfiguration.java | 5 +- ...ssionOAuth2AuthorizedClientRepository.java | 14 ++-- ...bstractAzureServiceConfigurationTests.java | 82 +++++++++---------- .../AadOAuth2ClientConfigurationTests.java | 64 +++++++-------- ...nCodeGrantRequestEntityConverterTests.java | 34 ++++---- .../AadB2cAutoConfigurationTests.java | 18 ++-- 7 files changed, 120 insertions(+), 121 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java index 710994e72182..b21f127a8e80 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadOAuth2ClientConfiguration.java @@ -118,11 +118,11 @@ OAuth2ClientAuthenticationJwkResolver oAuth2ClientAuthenticationJwkResolver(AadA @Bean @ConditionalOnMissingBean OAuth2AuthorizedClientManager authorizedClientManager( - ClientRegistrationRepository clientRegistrations, - OAuth2AuthorizedClientRepository authorizedClients, - RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, - JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, - ObjectProvider jwkResolvers) { + ClientRegistrationRepository clientRegistrations, + OAuth2AuthorizedClientRepository authorizedClients, + RefreshTokenOAuth2AuthorizedClientProvider refreshTokenProvider, + JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, + ObjectProvider jwkResolvers) { DefaultOAuth2AuthorizedClientManager manager = new DefaultOAuth2AuthorizedClientManager(clientRegistrations, authorizedClients); @@ -147,7 +147,7 @@ OAuth2AuthorizedClientManager authorizedClientManager( @Bean @ConditionalOnMissingBean JwtBearerOAuth2AuthorizedClientProvider azureAdJwtBearerProvider( - ObjectProvider resolvers) { + ObjectProvider resolvers) { JwtBearerOAuth2AuthorizedClientProvider provider = new JwtBearerOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); DefaultJwtBearerTokenResponseClient client = new DefaultJwtBearerTokenResponseClient(); @@ -164,7 +164,7 @@ JwtBearerOAuth2AuthorizedClientProvider azureAdJwtBearerProvider( @Bean @ConditionalOnMissingBean RefreshTokenOAuth2AuthorizedClientProvider azureRefreshTokenProvider( - ObjectProvider resolvers) { + ObjectProvider resolvers) { RefreshTokenOAuth2AuthorizedClientProvider provider = new RefreshTokenOAuth2AuthorizedClientProvider(); OAuth2ClientAuthenticationJwkResolver resolver = resolvers.getIfUnique(); DefaultRefreshTokenTokenResponseClient client = new DefaultRefreshTokenTokenResponseClient(); @@ -190,13 +190,13 @@ RefreshTokenOAuth2AuthorizedClientProvider azureRefreshTokenProvider( JwtDecoderFactory azureAdJwtDecoderFactory(AadAuthenticationProperties properties) { AadProfileProperties profile = properties.getProfile(); AadAuthorizationServerEndpoints endpoints = new AadAuthorizationServerEndpoints( - profile.getEnvironment().getActiveDirectoryEndpoint(), profile.getTenantId()); + profile.getEnvironment().getActiveDirectoryEndpoint(), profile.getTenantId()); return new AadOidcIdTokenDecoderFactory(endpoints.getJwkSetEndpoint(), createRestTemplate(restTemplateBuilder)); } private void passwordGrantBuilderAccessTokenResponseClientCustomizer( - OAuth2AuthorizedClientProviderBuilder.PasswordGrantBuilder builder, - OAuth2ClientAuthenticationJwkResolver resolver) { + OAuth2AuthorizedClientProviderBuilder.PasswordGrantBuilder builder, + OAuth2ClientAuthenticationJwkResolver resolver) { DefaultPasswordTokenResponseClient client = new DefaultPasswordTokenResponseClient(); client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { @@ -208,8 +208,8 @@ private void passwordGrantBuilderAccessTokenResponseClientCustomizer( } private void clientCredentialsGrantBuilderAccessTokenResponseClientCustomizer( - OAuth2AuthorizedClientProviderBuilder.ClientCredentialsGrantBuilder builder, - OAuth2ClientAuthenticationJwkResolver resolver) { + OAuth2AuthorizedClientProviderBuilder.ClientCredentialsGrantBuilder builder, + OAuth2ClientAuthenticationJwkResolver resolver) { DefaultClientCredentialsTokenResponseClient client = new DefaultClientCredentialsTokenResponseClient(); client.setRestOperations(createOAuth2AccessTokenResponseClientRestTemplate(restTemplateBuilder)); if (resolver != null) { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java index e6ad19bd01ee..efa4eddc20db 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java @@ -65,8 +65,7 @@ public AadResourceServerConfiguration(RestTemplateBuilder restTemplateBuilder) { @ConditionalOnMissingBean(JwtDecoder.class) public JwtDecoder jwtDecoder(AadAuthenticationProperties aadAuthenticationProperties) { AadAuthorizationServerEndpoints identityEndpoints = new AadAuthorizationServerEndpoints( - aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), - aadAuthenticationProperties.getProfile().getTenantId()); + aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), aadAuthenticationProperties.getProfile().getTenantId()); NimbusJwtDecoder nimbusJwtDecoder = NimbusJwtDecoder .withJwkSetUri(identityEndpoints.getJwkSetEndpoint()) .restOperations(createRestTemplate(restTemplateBuilder)) @@ -107,7 +106,7 @@ public List> createDefaultValidator(AadAuthenticationP @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class) @ConditionalOnExpression("!'${spring.cloud.azure.active-directory.application-type}'.equalsIgnoreCase('web_application_and_resource_server')") public static class DefaultAadResourceServerWebSecurityConfigurerAdapter extends - AadResourceServerWebSecurityConfigurerAdapter { + AadResourceServerWebSecurityConfigurerAdapter { /** * configure diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java index b2f8445e974a..84f3c1c58ffb 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java @@ -29,7 +29,7 @@ */ public class JacksonHttpSessionOAuth2AuthorizedClientRepository implements OAuth2AuthorizedClientRepository { private static final String AUTHORIZED_CLIENTS_ATTR_NAME = - JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS"; + JacksonHttpSessionOAuth2AuthorizedClientRepository.class.getName() + ".AUTHORIZED_CLIENTS"; private static final String MSG_REQUEST_CANNOT_BE_NULL = "request cannot be null"; @@ -53,7 +53,7 @@ public void saveAuthorizedClient(OAuth2AuthorizedClient authorizedClient, Authen new HashMap<>(this.getAuthorizedClients(request)); authorizedClients.put(authorizedClient.getClientRegistration().getRegistrationId(), authorizedClient); request.getSession().setAttribute(AUTHORIZED_CLIENTS_ATTR_NAME, - serializeOAuth2AuthorizedClientMap(authorizedClients)); + serializeOAuth2AuthorizedClientMap(authorizedClients)); } @Override @@ -67,7 +67,7 @@ public void removeAuthorizedClient(String clientRegistrationId, Authentication p request.getSession().removeAttribute(AUTHORIZED_CLIENTS_ATTR_NAME); } else { request.getSession().setAttribute(AUTHORIZED_CLIENTS_ATTR_NAME, - serializeOAuth2AuthorizedClientMap(authorizedClients)); + serializeOAuth2AuthorizedClientMap(authorizedClients)); } } @@ -76,9 +76,9 @@ public void removeAuthorizedClient(String clientRegistrationId, Authentication p private Map getAuthorizedClients(HttpServletRequest request) { HttpSession session = request.getSession(false); return Optional.ofNullable(session) - .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) - .map(Object::toString) - .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) - .orElse(Collections.emptyMap()); + .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) + .map(Object::toString) + .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) + .orElse(Collections.emptyMap()); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java index 15f1fb26d225..13fdcb1ef7d4 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/AbstractAzureServiceConfigurationTests.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat; public abstract class AbstractAzureServiceConfigurationTests, - P extends AzureProperties> { + P extends AzureProperties> { protected abstract ApplicationContextRunner getMinimalContextRunner(); @@ -37,55 +37,55 @@ public abstract class AbstractAzureServiceConfigurationTests { - assertSovereignCloudsSetInCredential(context, ClientSecretCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.client-secret=fake-client-secret" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, ClientSecretCredential.class); + }); } @Test protected void usGovCloudShouldWorkWithClientCertificateCredential() { getMinimalContextRunner() - .withPropertyValues( - getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", - getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", - getPropertyPrefix() + ".credential.client-id=fake-client-id", - getPropertyPrefix() + ".credential.client-certificate-path=fake-client-cert-path" - ) - .withConfiguration(AutoConfigurations.of( - AzureTokenCredentialAutoConfiguration.class, - AzureGlobalPropertiesAutoConfiguration.class - )) - .run(context -> { - assertSovereignCloudsSetInCredential(context, ClientCertificateCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".profile.tenant-id=fake-tenant-id", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.client-certificate-path=fake-client-cert-path" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, ClientCertificateCredential.class); + }); } @Test protected void usGovCloudShouldWorkWithUsernamePasswordCredential() { getMinimalContextRunner() - .withPropertyValues( - getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", - getPropertyPrefix() + ".credential.client-id=fake-client-id", - getPropertyPrefix() + ".credential.username=123", - getPropertyPrefix() + ".credential.password=123" - ) - .withConfiguration(AutoConfigurations.of( - AzureTokenCredentialAutoConfiguration.class, - AzureGlobalPropertiesAutoConfiguration.class - )) - .run(context -> { - assertSovereignCloudsSetInCredential(context, UsernamePasswordCredential.class); - }); + .withPropertyValues( + getPropertyPrefix() + ".profile.cloud-type=AZURE_US_GOVERNMENT", + getPropertyPrefix() + ".credential.client-id=fake-client-id", + getPropertyPrefix() + ".credential.username=123", + getPropertyPrefix() + ".credential.password=123" + ) + .withConfiguration(AutoConfigurations.of( + AzureTokenCredentialAutoConfiguration.class, + AzureGlobalPropertiesAutoConfiguration.class + )) + .run(context -> { + assertSovereignCloudsSetInCredential(context, UsernamePasswordCredential.class); + }); } private void assertSovereignCloudsSetInCredential(AssertableApplicationContext context, Class credentialType) { @@ -106,7 +106,7 @@ private void assertSovereignCloudsSetInCredential(AssertableApplicationConte private AzureTokenCredentialResolver getAzureTokenCredentialResolver(T builderFactory) { return (AzureTokenCredentialResolver) getField(getBuilderFactoryType(), - "tokenCredentialResolver", builderFactory); + "tokenCredentialResolver", builderFactory); } private IdentityClient getIdentityClient(TokenCredential credential) { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java index b98b842c636d..40fbe1a69df0 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AadOAuth2ClientConfigurationTests.java @@ -52,9 +52,9 @@ class AadOAuth2ClientConfigurationTests { @Test void testWithoutAnyPropertiesSet() { new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of( - HttpMessageConvertersAutoConfiguration.class, - RestTemplateAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of( + HttpMessageConvertersAutoConfiguration.class, + RestTemplateAutoConfiguration.class)) .withUserConfiguration(AadOAuth2ClientConfiguration.class) .run(context -> { assertThat(context).doesNotHaveBean(AadAuthenticationProperties.class); @@ -104,9 +104,9 @@ void testResourceServerWithOboOnlyGraphClient() { "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=https://graph.microsoft.com/User.Read") .run(context -> { final AadClientRegistrationRepository oboRepo = context.getBean( - AadClientRegistrationRepository.class); + AadClientRegistrationRepository.class); final OAuth2AuthorizedClientRepository aadOboRepo = context.getBean( - OAuth2AuthorizedClientRepository.class); + OAuth2AuthorizedClientRepository.class); ClientRegistration graph = oboRepo.findByRegistrationId("graph"); Set graphScopes = graph.getScopes(); @@ -153,9 +153,9 @@ void testResourceServerWithOboExistCustomAndGraphClient() { ) .run(context -> { final AadClientRegistrationRepository oboRepo = context.getBean( - AadClientRegistrationRepository.class); + AadClientRegistrationRepository.class); final OAuth2AuthorizedClientRepository aadOboRepo = context.getBean( - OAuth2AuthorizedClientRepository.class); + OAuth2AuthorizedClientRepository.class); ClientRegistration graph = oboRepo.findByRegistrationId("graph"); ClientRegistration custom = oboRepo.findByRegistrationId("custom"); @@ -184,9 +184,9 @@ void defaultConverterInJwtBearerOAuth2AuthorizedClientProviderWhenNotUsingPrivat .run(context -> { assertThat(context).doesNotHaveBean(OAuth2ClientAuthenticationJwkResolver.class); final JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider = context.getBean( - JwtBearerOAuth2AuthorizedClientProvider.class); + JwtBearerOAuth2AuthorizedClientProvider.class); final ClientRegistrationRepository clientRepository = context.getBean( - ClientRegistrationRepository.class); + ClientRegistrationRepository.class); MultiValueMap parameters = convertParameters(jwtBearerProvider, clientRepository); assertThat(parameters).containsEntry("requested_token_use", Arrays.asList("on_behalf_of")); }); @@ -214,9 +214,9 @@ void customConverterInJwtBearerOAuth2AuthorizedClientProviderWhenUsingPrivateKey .run(context -> { assertThat(context).hasSingleBean(OAuth2ClientAuthenticationJwkResolver.class); final JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider = context.getBean( - JwtBearerOAuth2AuthorizedClientProvider.class); + JwtBearerOAuth2AuthorizedClientProvider.class); final ClientRegistrationRepository clientRepository = context.getBean( - ClientRegistrationRepository.class); + ClientRegistrationRepository.class); MultiValueMap parameters = convertParameters(jwtBearerProvider, clientRepository); assertThat(parameters).containsEntry("requested_token_use", Arrays.asList("on_behalf_of")); @@ -228,44 +228,44 @@ void customConverterInJwtBearerOAuth2AuthorizedClientProviderWhenUsingPrivateKey @Test void restTemplateWellConfiguredWhenNotUsingPrivateKeyJwtMethod() { webApplicationContextRunner() - .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) - .run(context -> { - assertThat(context).doesNotHaveBean(OAuth2ClientAuthenticationJwkResolver.class); - assertRestTemplateWellConfigured(context); - }); + .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) + .run(context -> { + assertThat(context).doesNotHaveBean(OAuth2ClientAuthenticationJwkResolver.class); + assertRestTemplateWellConfigured(context); + }); } @Test void restTemplateWellConfiguredWhenUsingPrivateKeyJwtMethod() { webApplicationContextRunner() - .withPropertyValues( - "spring.cloud.azure.active-directory.enabled=true", - "spring.cloud.azure.active-directory.credential.client-certificate-path=/test/test.pfx", - "spring.cloud.azure.active-directory.credential.client-certificate-password=test", - "spring.cloud.azure.active-directory.authorization-clients.graph.client-authentication-method=private_key_jwt", - "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=https://graph.microsoft.com/User.Read", - "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=api://52261059-e515-488e-84fd-a09a3f372814/File.Read" - ) - .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) - .run(context -> { - assertThat(context).hasSingleBean(OAuth2ClientAuthenticationJwkResolver.class); - assertRestTemplateWellConfigured(context); - }); + .withPropertyValues( + "spring.cloud.azure.active-directory.enabled=true", + "spring.cloud.azure.active-directory.credential.client-certificate-path=/test/test.pfx", + "spring.cloud.azure.active-directory.credential.client-certificate-password=test", + "spring.cloud.azure.active-directory.authorization-clients.graph.client-authentication-method=private_key_jwt", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=https://graph.microsoft.com/User.Read", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes=api://52261059-e515-488e-84fd-a09a3f372814/File.Read" + ) + .withUserConfiguration(AadOAuth2ClientConfiguration.class, RestTemplateProxyCustomizerConfiguration.class) + .run(context -> { + assertThat(context).hasSingleBean(OAuth2ClientAuthenticationJwkResolver.class); + assertRestTemplateWellConfigured(context); + }); } @SuppressWarnings("unchecked") private MultiValueMap convertParameters(JwtBearerOAuth2AuthorizedClientProvider jwtBearerProvider, ClientRegistrationRepository clientRepository) { OAuth2AccessTokenResponseClient client = - (OAuth2AccessTokenResponseClient) ReflectionTestUtils.getField(jwtBearerProvider, "accessTokenResponseClient"); + (OAuth2AccessTokenResponseClient) ReflectionTestUtils.getField(jwtBearerProvider, "accessTokenResponseClient"); assertThat(client.getClass().getSimpleName()).isEqualTo(DefaultJwtBearerTokenResponseClient.class.getSimpleName()); JwtBearerGrantRequestEntityConverter requestEntityConverter = - (JwtBearerGrantRequestEntityConverter) ReflectionTestUtils.getField(client, "requestEntityConverter"); + (JwtBearerGrantRequestEntityConverter) ReflectionTestUtils.getField(client, "requestEntityConverter"); assertThat(requestEntityConverter.getClass().getSimpleName()).isEqualTo(AadJwtBearerGrantRequestEntityConverter.class.getSimpleName()); Converter> parametersConverter = - (Converter>) ReflectionTestUtils.getField(requestEntityConverter, "parametersConverter"); + (Converter>) ReflectionTestUtils.getField(requestEntityConverter, "parametersConverter"); JwtBearerGrantRequest request = new JwtBearerGrantRequest(clientRepository.findByRegistrationId("graph"), mock(Jwt.class)); return parametersConverter.convert(request); } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java index 3e89a8aa8ad2..b6e766304469 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java @@ -30,20 +30,20 @@ class AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests { private WebApplicationContextRunner getContextRunner() { return WebApplicationContextRunnerUtils - .webApplicationContextRunner() - .withPropertyValues( - "spring.cloud.azure.active-directory.enabled = true", - "spring.cloud.azure.active-directory.base-uri = fake-uri", - "spring.cloud.azure.active-directory.authorization-clients.graph.scopes = Graph.Scope", - "spring.cloud.azure.active-directory.authorization-clients.arm.scopes = Arm.Scope", - "spring.cloud.azure.active-directory.authorization-clients.arm.authorization-grant-type = authorization_code"); + .webApplicationContextRunner() + .withPropertyValues( + "spring.cloud.azure.active-directory.enabled = true", + "spring.cloud.azure.active-directory.base-uri = fake-uri", + "spring.cloud.azure.active-directory.authorization-clients.graph.scopes = Graph.Scope", + "spring.cloud.azure.active-directory.authorization-clients.arm.scopes = Arm.Scope", + "spring.cloud.azure.active-directory.authorization-clients.arm.authorization-grant-type = authorization_code"); } @Test void addScopeForAzureClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration azure = repository.findByRegistrationId(AZURE_CLIENT_REGISTRATION_ID); MultiValueMap body = convertedBodyOf(repository, createCodeGrantRequest(azure)); assertEquals("openid profile offline_access", body.getFirst("scope")); @@ -54,7 +54,7 @@ void addScopeForAzureClient() { void addScopeForAuthorizationCodeClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration arm = repository.findByRegistrationId("arm"); MultiValueMap body = convertedBodyOf(repository, createCodeGrantRequest(arm)); assertEquals("Arm.Scope openid profile offline_access", body.getFirst("scope")); @@ -82,7 +82,7 @@ void onlyAddScopeOnceEvenConvertMethodExecutedMultipleTimes() { void addHeadersForAzureClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration azure = repository.findByRegistrationId(AZURE_CLIENT_REGISTRATION_ID); HttpHeaders httpHeaders = convertedHeaderOf(repository, createCodeGrantRequest(azure)); testHttpHeaders(httpHeaders); @@ -93,7 +93,7 @@ void addHeadersForAzureClient() { void addHeadersForAuthorizationCodeClient() { getContextRunner().run(context -> { AadClientRegistrationRepository repository = - (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); + (AadClientRegistrationRepository) context.getBean(ClientRegistrationRepository.class); ClientRegistration arm = repository.findByRegistrationId("arm"); HttpHeaders httpHeaders = convertedHeaderOf(repository, createCodeGrantRequest(arm)); testHttpHeaders(httpHeaders); @@ -103,11 +103,11 @@ void addHeadersForAuthorizationCodeClient() { private HttpHeaders convertedHeaderOf(AadClientRegistrationRepository repository, OAuth2AuthorizationCodeGrantRequest request) { AadOAuth2AuthorizationCodeGrantRequestEntityConverter converter = - new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); + new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); RequestEntity entity = converter.convert(request); return Optional.ofNullable(entity) - .map(HttpEntity::getHeaders) - .orElse(null); + .map(HttpEntity::getHeaders) + .orElse(null); } private void testHttpHeaders(HttpHeaders headers) { @@ -121,7 +121,7 @@ private void testHttpHeaders(HttpHeaders headers) { private MultiValueMap convertedBodyOf(AadClientRegistrationRepository repository, OAuth2AuthorizationCodeGrantRequest request) { AadOAuth2AuthorizationCodeGrantRequestEntityConverter converter = - new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); + new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); RequestEntity entity = converter.convert(request); return WebApplicationContextRunnerUtils.toMultiValueMap(entity); } @@ -132,8 +132,8 @@ private OAuth2AuthorizationCodeGrantRequest createCodeGrantRequest(ClientRegistr private OAuth2AuthorizationExchange createExchange(ClientRegistration client) { return new OAuth2AuthorizationExchange( - createAuthorizationRequest(client), - createAuthorizationResponse()); + createAuthorizationRequest(client), + createAuthorizationResponse()); } private OAuth2AuthorizationRequest createAuthorizationRequest(ClientRegistration client) { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java index 2297c4a4f43e..488dc6049ad6 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java @@ -255,9 +255,9 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { AadB2cConditions.ClientRegistrationCondition clientRegistrationCondition = spy(AadB2cConditions.ClientRegistrationCondition.class); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.UserFlowCondition.class)) - .thenReturn(userFlowCondition); + .thenReturn(userFlowCondition); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.ClientRegistrationCondition.class)) - .thenReturn(clientRegistrationCondition); + .thenReturn(clientRegistrationCondition); new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( WebResourceServerApp.class, @@ -276,9 +276,9 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { @Test void testRestTemplateWellConfigured() { getDefaultContextRunner() - .withUserConfiguration(RestTemplateProxyCustomizerConfiguration.class, AadB2cTestWebSecurityConfiguration.class) - .withPropertyValues("spring.cloud.azure.active-directory.b2c.enabled=true") - .run(RestTemplateTestUtil::assertRestTemplateWellConfigured); + .withUserConfiguration(RestTemplateProxyCustomizerConfiguration.class, AadB2cTestWebSecurityConfiguration.class) + .withPropertyValues("spring.cloud.azure.active-directory.b2c.enabled=true") + .run(RestTemplateTestUtil::assertRestTemplateWellConfigured); } @EnableWebSecurity @@ -294,10 +294,10 @@ public static class AadB2cTestWebSecurityConfiguration extends WebSecurityConfig protected void configure(HttpSecurity http) throws Exception { // @formatter:off http - .authorizeRequests() - .anyRequest().authenticated() - .and() - .apply(configurer); + .authorizeRequests() + .anyRequest().authenticated() + .and() + .apply(configurer); // @formatter:on } } From 6786436b8557996c04413231b339dd47283c4b01 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 13:21:30 +0800 Subject: [PATCH 10/14] revert some changes --- .../AadResourceServerConfiguration.java | 2 +- ...ttpSessionOAuth2AuthorizedClientRepository.java | 8 ++++---- .../aadb2c/AadB2cOidcLoginConfigurer.java | 14 +++++++------- ...zationCodeGrantRequestEntityConverterTests.java | 4 ++-- .../AadB2cAutoConfigurationTests.java | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java index efa4eddc20db..a1c1d770d9af 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/configuration/AadResourceServerConfiguration.java @@ -65,7 +65,7 @@ public AadResourceServerConfiguration(RestTemplateBuilder restTemplateBuilder) { @ConditionalOnMissingBean(JwtDecoder.class) public JwtDecoder jwtDecoder(AadAuthenticationProperties aadAuthenticationProperties) { AadAuthorizationServerEndpoints identityEndpoints = new AadAuthorizationServerEndpoints( - aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), aadAuthenticationProperties.getProfile().getTenantId()); + aadAuthenticationProperties.getProfile().getEnvironment().getActiveDirectoryEndpoint(), aadAuthenticationProperties.getProfile().getTenantId()); NimbusJwtDecoder nimbusJwtDecoder = NimbusJwtDecoder .withJwkSetUri(identityEndpoints.getJwkSetEndpoint()) .restOperations(createRestTemplate(restTemplateBuilder)) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java index 84f3c1c58ffb..2a929e93d4ee 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/JacksonHttpSessionOAuth2AuthorizedClientRepository.java @@ -76,9 +76,9 @@ public void removeAuthorizedClient(String clientRegistrationId, Authentication p private Map getAuthorizedClients(HttpServletRequest request) { HttpSession session = request.getSession(false); return Optional.ofNullable(session) - .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) - .map(Object::toString) - .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) - .orElse(Collections.emptyMap()); + .map(s -> s.getAttribute(AUTHORIZED_CLIENTS_ATTR_NAME)) + .map(Object::toString) + .map(SerializerUtils::deserializeOAuth2AuthorizedClientMap) + .orElse(Collections.emptyMap()); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java index e9dd83ca4e7e..8be50cf3526e 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aadb2c/AadB2cOidcLoginConfigurer.java @@ -81,14 +81,14 @@ public AadB2cOidcLoginConfigurer(LogoutSuccessHandler handler, public void init(HttpSecurity http) throws Exception { // @formatter:off http.logout() - .logoutSuccessHandler(handler) - .and() + .logoutSuccessHandler(handler) + .and() .oauth2Login() - .authorizationEndpoint() - .authorizationRequestResolver(resolver) - .and() - .tokenEndpoint() - .accessTokenResponseClient(accessTokenResponseClient()); + .authorizationEndpoint() + .authorizationRequestResolver(resolver) + .and() + .tokenEndpoint() + .accessTokenResponseClient(accessTokenResponseClient()); // @formatter:on } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java index b6e766304469..126d019049f0 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aad/implementation/webapp/AadOAuth2AuthorizationCodeGrantRequestEntityConverterTests.java @@ -106,8 +106,8 @@ private HttpHeaders convertedHeaderOf(AadClientRegistrationRepository repository new AadOAuth2AuthorizationCodeGrantRequestEntityConverter(repository.getAzureClientAccessTokenScopes()); RequestEntity entity = converter.convert(request); return Optional.ofNullable(entity) - .map(HttpEntity::getHeaders) - .orElse(null); + .map(HttpEntity::getHeaders) + .orElse(null); } private void testHttpHeaders(HttpHeaders headers) { diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java index 488dc6049ad6..95dc2fe2232a 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java @@ -255,9 +255,9 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { AadB2cConditions.ClientRegistrationCondition clientRegistrationCondition = spy(AadB2cConditions.ClientRegistrationCondition.class); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.UserFlowCondition.class)) - .thenReturn(userFlowCondition); + .thenReturn(userFlowCondition); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.ClientRegistrationCondition.class)) - .thenReturn(clientRegistrationCondition); + .thenReturn(clientRegistrationCondition); new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( WebResourceServerApp.class, From f0bdd4d32b72abaca51e8dcb57cc2e17810d6dc4 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 13:46:14 +0800 Subject: [PATCH 11/14] fix Unknown word --- .vscode/cspell.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 89c17ae638a3..53682d7f5905 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -633,6 +633,19 @@ "JPMS" ] }, + { + "filename": "sdk/spring/README.md", + "words": [ + "Dcheckstyle", + "Dcodesnippet", + "Djacoco", + "Drevapi", + "Dskip", + "Dspotbugs", + "Pdev", + "" + ] + }, { "filename": "sdk/storage/azure-storage-common/**", "words": [ From 29f42051b458eaddf7cb3552f545a31e4ba58878 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 13:52:16 +0800 Subject: [PATCH 12/14] revert --- .../aadb2c/implementation/AadB2cAutoConfigurationTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java index 95dc2fe2232a..32fac61e4b91 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/aadb2c/implementation/AadB2cAutoConfigurationTests.java @@ -255,9 +255,9 @@ void testWebappConditionsIsNotInvokedWhenAADB2CDisabled() { AadB2cConditions.ClientRegistrationCondition clientRegistrationCondition = spy(AadB2cConditions.ClientRegistrationCondition.class); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.UserFlowCondition.class)) - .thenReturn(userFlowCondition); + .thenReturn(userFlowCondition); beanUtils.when(() -> BeanUtils.instantiateClass(AadB2cConditions.ClientRegistrationCondition.class)) - .thenReturn(clientRegistrationCondition); + .thenReturn(clientRegistrationCondition); new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( WebResourceServerApp.class, From 93db0234b21fa44ae0f16f57c64dd350d6919452 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 14:22:02 +0800 Subject: [PATCH 13/14] fix --- ...h2AuthorizationCodeGrantRequestEntityConverter.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java index 929c79888183..eefe948c4e36 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/oauth2/AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter.java @@ -20,15 +20,7 @@ public abstract class AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter extends OAuth2AuthorizationCodeGrantRequestEntityConverter { private static final MultiValueMap EMPTY_MULTI_VALUE_MAP = - new MultiValueMapAdapter<>(Collections.emptyMap()); - - protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { - addHeadersConverter(this::getHttpHeaders); - addParametersConverter(this::getHttpBody); - } - - private static final MultiValueMap EMPTY_MULTI_VALUE_MAP = - new MultiValueMapAdapter<>(Collections.emptyMap()); + new MultiValueMapAdapter<>(Collections.emptyMap()); protected AbstractOAuth2AuthorizationCodeGrantRequestEntityConverter() { addHeadersConverter(this::getHttpHeaders); From 097f9b420ae285a5685a935e19a8a0e836bce7a3 Mon Sep 17 00:00:00 2001 From: Muyao Date: Tue, 1 Nov 2022 15:46:48 +0800 Subject: [PATCH 14/14] fix for comments --- ...tTemplateProxyCustomizerConfiguration.java | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java deleted file mode 100644 index 2ba71b071fb3..000000000000 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/aad/implementation/RestTemplateProxyCustomizerConfiguration.java +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.autoconfigure.aad.implementation; - -import org.springframework.boot.web.client.RestTemplateCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.SimpleClientHttpRequestFactory; -import org.springframework.web.client.RestTemplate; - -import java.net.InetSocketAddress; -import java.net.Proxy; - -@Configuration -public class RestTemplateProxyCustomizerConfiguration { - - public static final SimpleClientHttpRequestFactory FACTORY = createProxyFactory(); - - @Bean - public RestTemplateCustomizer proxyRestTemplateCustomizer() { - return (RestTemplate restTemplate) -> restTemplate.setRequestFactory(FACTORY); - } - - static SimpleClientHttpRequestFactory createProxyFactory() { - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080)); - SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); - factory.setProxy(proxy); - return factory; - } -}