Azure Key Vault Secrets Spring Boot Starter 0.1.5
Tôi đang sử dụng phiên bản cũ hơn của Azure Key Vault Secrets Spring Boot Starter - 0.1.5 Cũng là phiên bản cũ hơn của spring-boot-starter như hình dưới đây ::
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.15.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
Không có thay đổi mã nào cho Azure keyvault, Trong application.properties, chúng tôi đã thêm vào bên dưới:
azure.keyvault.uri=<<Keyvault URL>>
azure.client-id=<<Keyvault client Id>>
azure.client-key=<<Keyvault Key>>
Bây giờ tôi đã nâng cấp các phiên bản của Spring boot starter và azure keyvault như bên dưới ::
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
<version>2.3.3</version>
<scope>runtime</scope>
</dependency>
application.properties
azure.keyvault.uri=<<Keyvault URL>>
azure.keyvault.enabled=true
azure.client-id=<<Client-ID>>
azure.client-key=<<Cleint key>>
Nó không thành công với các lỗi dưới đây, Bạn có thể vui lòng giúp những gì tôi cần làm nếu tôi đang nâng cấp lên phiên bản mới nhất.
13: 36: 59.270 [main] ERROR org.springframework.boot.SpringApplication - Ứng dụng chạy java.lang.IllegalStateException không thành công: Không định cấu hình được nguồn thuộc tính KeyVault tại com.microsoft.azure.keyvault.spring.KeyVaultEnosystemPostProcessorHelper.addKeyVaultPostProcessorHelper.addKeyVaultPostProperjaultEn : 110) tại com.microsoft.azure.keyvault.spring.KeyVaultEnosystemPostProcessor.postProcessEnosystem (KeyVaultEnosystemPostProcessor.java:47) tại org.springframework.boot.context.config.ConfigFileApp.org orgistener.onApplicationEnringListenework.org boot.context.config.ConfigFileApplicationListener.onApplicationEvent (ConfigFileApplicationListener.java:188) tại org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener (SimpleApplicationEventMulticaster.javalication.context hiện tượng đơn giản.eventMulticaster.javalication:172 jav a: 165) tại org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster.java:139) tại org.springframework.context.event.SimpleApplicationEventMulticaster.spulticastEvent (SimpleApplicationEventMulticast.java:139) tại org.springframework.context.event.SimpleApplicationEventMulticaster.multicframework org (SimpleApplication.jpg .event.EventPublishingRunListener.enosystemPrepared (EventPublishingRunListener.java:80) tại org.springframework.boot.SpringApplicationRunListaries.enosystemPrepared (SpringApplicationRunListaries.java:53) tại org.springframework.boot.SpringApplicationRunListaries.enosystemPrepared (SpringApplicationRunListaries.java:53) tại org.springframework.boot.Sparelication.jlication.prepare springframework.boot.SpringApplication.run (SpringApplication.java:308) tại org.springframework.boot.SpringApplication.run (SpringApplication.java:1237) tại org.springframework.boot.SpringApplication.run (SpringApplication.java:1226) tại com .honeywell.CaaS.GatewayManagerAPI.webapi.SpringBootMain.main (SpringBootMain.java:47) Gây ra bởi: java.lang.RuntimeException: Số lần thử lại tối đa vượt quá 3 lần. Chi tiết lỗi: Không thể truy cập mạng: kết nối tại com.azure.core.http.policy.RetryPolicy.lambda$attemptAsync$1 (RetryPolicy.java:119) tại reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError (MonoFlatMap.java:165) tại reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165) at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError (MonoFlatMap.java:185) tại reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:251) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError (MonoPeekTerminal.java:251) tại reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:251) at reactor.core.publisher.FluxPeekFuseable$PeekFusableConditionalSubscriber.onError (FluxPeekFusable.java:545) tại reactor.core.publisher.FluxPeekFusable$PeekFuseableConditionalSubscriber.onError(FluxPeekFuseable.java:545) at reactor.core.publisher.Operators.error(Operators.java:196) at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:134) at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext (MonoFlatMap.java:150) tại reactor.core.publisher.FluxMapFusable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121) at reactor.core.publisher.FluxMapFuseable$MapFusableSubscriber.onNext (FluxMapFusABLE.java:121) tại reactor.core.publisher.FluxPeekFusable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203) at reactor.core.publisher.Operators$MonoSubscriber.complete (Operators.java:1782) tại reactor.core.publisher.MonoSingle$SingleSubscriber.onComplete(MonoSingle.java:171) at reactor.core.publisher.Operators$ScalarSubscription.request (Operators.java:2346) tại reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribeInner(MonoFlatMapMany.java:143) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext (MonoFlatMapMany.java:182) tại reactor.core.publisher.SerializedSubscriber.onNext (SerializedSubscriber.java:99) tại reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onNext(FluxRetryWhen.java:162) at reactor.core.publisher.MonoCreate$DefaultMonoSink.success (MonoCreate.java:156) tại reactor.netty.http.client.HttpClientConnect$HttpIOHandlerObserver.onStateChange(HttpClientConnect.java:432) at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange (ReactorNetty.java:518) tại reactor.netty.resources.PooledConnectionProvider$DisposableAcquire.onStateChange(PooledConnectionProvider.java:561) at reactor.netty.resources.PooledConnectionProvider$PooledConnection.onStateChange (PooledConnectionProvider.java:448) tại reactor.netty.http.client.HttpClientOperations.onInboundNext (HttpClientOperations.java:594) tại reactor.netty.channel.ChannelOperations.netHandler.channelR96 .channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:379) tại io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:379) tại io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java.java netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:425) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1526) at io.netty.handler.ssl.SslHandler.decodeNonJdkCompatible(SslHandler.java:1287) at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1324) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead (DefaultChannelPipeline.java:1410) tại io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:379) tại io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:379) tại io.netty.charactChannel.AbstavaContextextextin. .DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline.java:919) tại io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run (SingleThreadEventExecutor.java:989) tại io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.SocketException: Network is unreachable: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:606) at sun.net.NetworkClient.doConnect(NetworkClient.java:175) at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) at sun.net.www.http.HttpClient.(HttpClient.java:242) at sun.net.www.http.HttpClient.New(HttpClient.java:339) at sun.net.www.http.HttpClient.New(HttpClient.java:357) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990) at com.azure.identity.implementation.IdentityClient.lambda$checkIMDSAvailable $ 14 (IdentityClient.java:463) tại reactor.core.publisher.MonoCallable.call (MonoCallable.java:91) tại reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap (FluxFlatMap.java:126)
Trả lời
Có vẻ như bạn bỏ lỡ thuộc tính azure.keyvault.tenant-idtrong application.properties.
Tôi đã tạo lại lỗi này java.lang.IllegalStateException: Không thể định cấu hình nguồn thuộc tính KeyVault . Xem:
Sau khi thêm azure.keyvault.tenant-id=<your-tenant-id>vào tệp. Nó hoạt động:
Tôi tham khảo Cách sử dụng Spring Boot Starter cho Azure Key Vault và mẫu . Để cho phép nó hoạt động, hãy đảm bảo ứng dụng có quyền lấy và liệt kê các bí mật trong chính sách truy cập của kho chìa khóa của bạn.
application.properties
azure.keyvault.enabled=true
azure.keyvault.uri=https://{your-azure-keyvault}.vault.azure.net/
azure.keyvault.client-id=put-your-azure-client-id-here
azure.keyvault.client-key=put-your-azure-client-key-here
azure.keyvault.tenant-id=put-your-azure-tenant-id-here
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>11</java.version>
<azure.version>2.3.3</azure.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-spring-boot-bom</artifactId>
<version>${azure.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
DemoKeyVaultApplication.java
@SpringBootApplication
@RestController
public class DemoKeyVaultApplication implements CommandLineRunner {
@Value("${test1}")
private String testSecretName;
public static void main(final String[] args) {
SpringApplication.run(DemoKeyVaultApplication.class, args);
}
public void run(final String... varl) throws Exception {
System.out.println("testSecretName stored in Azure Key Vault: " + testSecretName);
}
}