diff --git a/java-17-sample/README.md b/java-17-sample/README.md index 17a9898..5483c63 100644 --- a/java-17-sample/README.md +++ b/java-17-sample/README.md @@ -15,11 +15,15 @@ az account set --subscription $SUBSCRIPTION ``` # Standard Plan +## Provision ASA Service Instance +```shell +az spring create --resource-group $RESOURCE_GROUP --name $SERVICE_NAME --sku standard --location $LOCATION +az spring app create -n java17sample --service $SERVICE_NAME -g $RESOURCE_GROUP --runtime-version Java_17 --assign-endpoint true +``` ## Deploy Application ```shell mvn clean package -az spring app create -n java17sample --service $SERVICE_NAME -g $RESOURCE_GROUP --runtime-version Java_17 --assign-endpoint true az spring app deploy -n java17sample --service $SERVICE_NAME -g $RESOURCE_GROUP --artifact-path ./target/java-17-sample-1.0-SNAPSHOT.jar ``` diff --git a/java-17-sample/pom.xml b/java-17-sample/pom.xml index 91d74ee..182da66 100644 --- a/java-17-sample/pom.xml +++ b/java-17-sample/pom.xml @@ -35,6 +35,10 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-client + + com.azure + azure-identity + org.apache.httpcomponents httpclient @@ -43,7 +47,7 @@ com.fasterxml.woodstox woodstox-core - 6.4.0 + 7.1.0 @@ -52,14 +56,21 @@ org.springframework.boot spring-boot-dependencies - 3.3.3 + 3.4.1 pom import org.springframework.cloud spring-cloud-dependencies - 2023.0.3 + 2024.0.0 + pom + import + + + com.azure + azure-sdk-bom + 1.2.30 pom import diff --git a/java-17-sample/src/main/java/com/azure/asa/sample/EurekaController.java b/java-17-sample/src/main/java/com/azure/asa/sample/EurekaController.java index 00f7610..e583bb8 100644 --- a/java-17-sample/src/main/java/com/azure/asa/sample/EurekaController.java +++ b/java-17-sample/src/main/java/com/azure/asa/sample/EurekaController.java @@ -13,7 +13,7 @@ @RestController public class EurekaController { - @Autowired + @Autowired(required = false) private EurekaClient discoveryClient; @GetMapping("/eureka") diff --git a/java-17-sample/src/main/java/com/azure/asa/sample/ManagedIdentityTestController.java b/java-17-sample/src/main/java/com/azure/asa/sample/ManagedIdentityTestController.java new file mode 100644 index 0000000..9fc0e23 --- /dev/null +++ b/java-17-sample/src/main/java/com/azure/asa/sample/ManagedIdentityTestController.java @@ -0,0 +1,26 @@ +package com.azure.asa.sample; + +import com.azure.core.credential.AccessToken; +import com.azure.core.credential.TokenRequestContext; +import com.azure.identity.ManagedIdentityCredential; +import com.azure.identity.ManagedIdentityCredentialBuilder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ManagedIdentityTestController { + + @GetMapping("/mi/token") + public String getAccessToken(@RequestParam(name = "client-id", required = false) String clientId) { + ManagedIdentityCredentialBuilder managedIdentityCredentialBuilder = new ManagedIdentityCredentialBuilder(); + if(clientId != null) { + managedIdentityCredentialBuilder.clientId(clientId); + } + ManagedIdentityCredential managedIdentityCredential = managedIdentityCredentialBuilder.build(); + AccessToken accessToken = managedIdentityCredential.getToken(new TokenRequestContext().addScopes("https://management.core.windows.net/")).block(); + + return accessToken.getToken(); + } + +} diff --git a/java-17-sample/src/main/java/com/azure/asa/sample/RestResponseEntityExceptionHandler.java b/java-17-sample/src/main/java/com/azure/asa/sample/RestResponseEntityExceptionHandler.java new file mode 100644 index 0000000..4320130 --- /dev/null +++ b/java-17-sample/src/main/java/com/azure/asa/sample/RestResponseEntityExceptionHandler.java @@ -0,0 +1,21 @@ +package com.azure.asa.sample; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { + + @ExceptionHandler(value = {RuntimeException.class}) + protected ResponseEntity handleConflict( + RuntimeException ex, WebRequest request) { + String bodyOfResponse = ex.getMessage(); + return handleExceptionInternal(ex, bodyOfResponse, + new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); + } +} diff --git a/java-17-sample/src/main/resources/application.properties b/java-17-sample/src/main/resources/application.properties index cf07a6a..2ee6b8f 100644 --- a/java-17-sample/src/main/resources/application.properties +++ b/java-17-sample/src/main/resources/application.properties @@ -3,4 +3,5 @@ management.endpoints.web.exposure.include=* management.endpoint.env.show-values=ALWAYS eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ eureka.client.healthcheck.enabled=true +#eureka.client.enabled=false spring.cloud.config.enabled=false \ No newline at end of file