项目名称:KOCA
KOCA版本 :5.2.0
KOCA模块 :网关
模块版本 :5.2.0
场景 :eureka开启了认证,网关想对认证的密码进行密文配置
问题 :无法连接注册中心
报错细节 :
网关配置:
eureka:
instance:
prefer-ip-address: true
status-page-url-path: ${management.endpoints.web.base-path}/info
health-check-url-path: ${management.endpoints.web.base-path}/health
instance-id: ${spring.cloud.client.ip-address}:${server.port}
metadata-map:
management.context-path: ${management.endpoints.web.base-path}
client:
service-url:
defaultZone: http://user:ENC(zYyoF7424UE=)@localhost:8085/eureka/
启动报错:
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:876)
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
尝试解决方案:
第一步:把密码改成明文测试:发现能成功连接注册中心
eureka:
instance:
prefer-ip-address: true
status-page-url-path: ${management.endpoints.web.base-path}/info
health-check-url-path: ${management.endpoints.web.base-path}/health
instance-id: ${spring.cloud.client.ip-address}:${server.port}
metadata-map:
management.context-path: ${management.endpoints.web.base-path}
client:
service-url:
defaultZone: http://user:123456@localhost:8085/eureka/
说明网关启动时
http://user:ENC(zYyoF7424UE=)@localhost:8085/eureka/
解密不成功。
第二步:加密依赖检查,发现网关没有引入下面的依赖
<dependency>
<groupId>com.szkingdom.koca.base</groupId>
<artifactId>koca-crypto</artifactId>
</dependency>
第三步:断点调试:
必须要以
ENC(开始,)结束才有才能正常解析。
第四步:采用如下方式,问题解决
test:
des: ENC(zYyoF7424UE=)
eureka:
instance:
prefer-ip-address: true
status-page-url-path: ${management.endpoints.web.base-path}/info
health-check-url-path: ${management.endpoints.web.base-path}/health
instance-id: ${spring.cloud.client.ip-address}:${server.port}
metadata-map:
management.context-path: ${management.endpoints.web.base-path}
client:
service-url:
defaultZone: http://user:${test.des}@localhost:8085/eureka/
第五步:如果是在网关启动依然启动报错
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:876)
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
说明解密还是失败,需要添加依赖
<dependency>
<groupId>com.szkingdom.koca.boot</groupId>
<artifactId>koca-boot-autoconfigure</artifactId>
</dependency>
加解密的装配类在这个包下面
第六步:成功解决



