Spring云配置服务器-Vault(AWS_IAM身份验证)



我正在设置一个spring-boot云配置服务器,该服务器使用VAULT来存储机密。

Vault身份验证机制设置为AWS_IAM。我的类路径中还有aws-java-sdk。还配置了Aws-cli。

当我向配置服务器发出请求时,我能够从VAULT获得机密,除了第一个请求

向配置服务器发出的第一个请求失败,因为它试图安排任务在到期后续订保管库令牌(来自保管库响应)

application.properties 中的配置

spring.profiles.active=跳马spring.cloud.config.server.vulture.kv版本=2spring.cloud.config.server.vulture.authentication=aws_iam

错误日志为

2020-02-07 18:47:17.089调试19328-〔nio-8088-esec-3〕o.s.v.a.AwsAm身份验证:登录成功************************************************************2020-02-07 18:47:17.091信息19328-[nio-8088-esec-3]o.s.v.a.LifecycleAwareSessionManager:安排令牌续订2020-02-07 18:47:17.100调试19328-[nio-8088-esec-3]o.s.web.servlet.DispatcherServlet:无法完成请求:java.lang.IollegalStateException:ThreadPoolTaskScheduler未初始化2020-02-07 18:47:17.107错误19328-[nio-8088-esec-3]o.a.c.c.[.[.[/].[dispatcherServlet]:路径为[]的上下文中Servlet[dispatcherServlet的Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IllegalStateException:ThreadPoolTaskScheduler未初始化]java.lang.IollegalStateException:ThreadPoolTaskScheduler未初始化位于org.springframework.util.Assert.state(Assert.java:73)~[spring-core-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler.getScheduledExecutor(ThreadPoolTaskScheduler.java:155)~[spring-context-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.scheducing.concurrent.ThreadPoolTaskScheduler.schedule(ThreadPoolTaskScheduler.cava:307)~[spring-context-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.wulture.authentication.LifecycleAwareSessionManagerLambda$scheduleRenewal$3(LifecycleAwareSession Manager.java:369)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于java.util.Optional.ifPresent(Optional.java:159)~[na:1.8.0_201]网址:org.springframework.wulture.authentication.LifecycleAwareSessionManager.scheduleRenewal(LifecycleAwareSession Manager.java:369)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wulture.authentication.LifecycleAwareSessionManager.doGetSessionToken(LifecycleAwareSession Manager.java:318)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wulture.authentication.LifecycleAwareSessionManager.getSessionToken(LifecycleAwareSession Manager.java:277)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wault.core.VaultTemplateLambda$getSessionInterceptor$1(VaultTemplate.java:276)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]在org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)~[spring-web-5.2.3.RELEASE.jar:5.2.3.RRELEASE]网址:org.springframework.wault.client.VaultClients.lambda$createRestTemplate$0(VaultClients.java:128)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]在org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)~[spring-web-5.2.3.RELEASE.jar:5.2.3.RRELEASE]网址:org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClient HttpRequest.java:48)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:742)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:615)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.wault.core.VaultKeyValueAccessorLambda$doRead$1(VaultKeyValueAccessor.java:133)~[spring-vault-core-2.2.1。RELEASE.jar:2.2.1。RELEASE]网址:org.springframework.wault.core.VaultKeyValueAccessorLambda$doRead$2(VaultKeyValueAccessor.java:168)~[spring-vault-core-2.2.1。RELEASE.jar:2.2.1。RELEASE]网址:org.springframework.wault.core.VaultTemplate.doWithSession(VaultTemplate.java:466)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wault.core.VaultKeyValueAccessor.doRead(VaultKeyValueAccessr.java:165)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wault.core.VaultKeyValueAccessor.doRead(VaultKeyValueAccessr.java:132)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wault.core.VaultKeyValueAccessor.doRead(VaultKeyValueAccessor.java:109)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.wault.core.VaultKeyValue2Template.get(VaultKeyValue2TTemplate.java:53)~[spring-vault-core-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.cloud.config.server.environment.wulture.SpringVaultEnvironmentRepository.read(SpringVaultEnviironmentRepository.java:51)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cloud.config.server.environment.AbstractVaultEnvironmentRepository.findOne(AbstractVaultEnvironmentRepository.java:88)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.cloud.config.server.environment.EnvironmentRepository.findOne(EnvironmentRepository.java:31)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cloud.config.server.environment.EnvironmentRepository$$FastClassBySpringCGLIB$$6ae93c63.invoke()~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)~[spring-core-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAop Proxy.java:769)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RRELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:163)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.prough(CglibAop Proxy.java:747)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.validation.beanvalidation.MethodValidationInterceptor.ioke(MethodValidationIntersector.java:120)~[spring-context-5.2.3.RELEASE.jar:5.2.3.REASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.prough(CglibAop Proxy.java:747)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.incept(CglibAop Proxy.java:689)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.cloud.config.server.environment.wulture.SpringVaultEnvironmentRepository$$EnhancerBySpringCGLIB$$4d24df30.findOne()~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentStorage.java:58)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:61)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]网址:org.springframework.cloud.config.server.environment.EnvironmentController.getEnvironment(EnvironmentController.java:144)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]位于org.springframework.cloud.config.server.environment.EnvironmentController.defaultLabel(EnvironmentController.java:108)~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.REASE]在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_201]在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0_201]在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_201]位于java.lang.reflect.Method.ioke(Method.java:498)~[na:1.8.0_201]位于org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)~[spring-core-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.ioke(GenericScop.java:499)~[spring-cloud-context-2.2.1.RELEASE.jar:2.2.1.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.prough(CglibAop Proxy.java:747)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.incept(CglibAop Proxy.java:689)~[spring-aop-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.cloud.config.server.environment.EnvironmentController$$EnhancerBySpringCGLIB$$fb6d1754.defaultLabel()~[spring-cloud-config-server-2.2.1.RELEASE.jar:2.2.1.RELEASE]在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0_201]在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0_201]在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_201]位于java.lang.reflect.Method.ioke(Method.java:498)~[na:1.8.0_201]在org.springframework.web.method.support.InvocaleHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]在org.springframework.web.method.support.InvocaleHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandledAdapter.java:793)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethod Adapter.java:87)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]在javax.servlet.httpHttpServlet.service(HttpServlet.java:634)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)~[spring-webmvc-5.2.3.REASE.jar:5.2.3.REASE]在javax.servlet.httpHttpServlet.service(HttpServlet.java:741)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)~[tomcat-embed-websocket-90.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108)~[spring-boot-actuator-2.2.4.RELEASE.jar:2.2.4.REASE]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncoding filter.java:201)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.2.3.RELEASE.jar:5.2.3.REASE]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.StandardWrapperValv.invoke(StandardWrapperValve.java:202)~[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.StandardContextValv.invoke(StandardContextValv.java:96)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.authenticator.AuthenticatorBase.ioke(AuthenticatorBase.java:541)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.StandardHostValv.invoke(StandardHostValve.java:139)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.vals.ErrorReportValve.ioke(ErrorReportValve.java:92)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.core.StandardEngineValv.invoke(StandardEngineValv.java:74)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.catalina.connecter.CoyoteAdapter.service(Coyotedapter.java:343)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.coyote.AbstractProcessorLight.produce(AbstractProcessorLight.java:65)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)[tomcat-embed-core-9.0.30.jar:9.0.30]网址:org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-embed-core-9.0.30.jar:9.0.30]位于java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1149)[na:1.8.0_201]位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)[na:1.8.0_201]网址:org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-9.0.30.jar:9.0.30]在java.lang.Thread.run(Thread.java:748)[na:1.8.0_201]

这是spring cloud配置的一个错误。请参阅本期。它应该在伊尔福德修理。除了更新版本之外,没有任何修复程序。根据此评论:

这是一个错误:SpringVaultClientConfiguration不是@Configuration类。Spring Vault仍然采用CGlib代理,而Spring Cloud Config Vault支持没有用@Configuration 进行注释


我的旧答案供参考。错误


我们遇到了同样的问题,直到我今天解决了它。看起来,即使你能够击中跳马,弹簧也默认为NativeEnvironmentRepository。只需提供您自己的类型为VaultEnvironmentRepository的bean就可以解决这个问题。

@Bean
public VaultEnvironmentRepository vaultEnvironmentRepository(
ObjectProvider<HttpServletRequest> objectProvider, 
EnvironmentWatch environmentWatch,
RestTemplate restTemplate,
VaultEnvironmentProperties vaultEnvironmentProperties
) {
return new VaultEnvironmentRepository(objectProvider, environmentWatch, restTemplate, vaultEnvironmentProperties);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}

最新更新