本文共 3102 字,大约阅读时间需要 10 分钟。
在搭建SpringCloud(Finchley.SR2) Eureka 服务端和客户端环境时,在添加了验证功能,SpringSecurity,客户端在注册到服务端时候,会出现下面的异常
com.netflix.discovery.DiscoveryClient : DiscoveryClient_PROVIDER/10.100.20.50:provider:9711 - registration failed Cannot execute request on any known servercom.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) [eureka-client-1.9.3.jar:1.9.3] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.3.jar:1.9.3] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_161] at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) [na:1.8.0_161] at java.util.concurrent.FutureTask.run(FutureTask.java) [na:1.8.0_161] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_161] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_161] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
服务端配置文件
spring: application: name: eureka-server security: user: name: root password: root
客户端配置
server: port: 9711eureka: instance: # 指定当profile=provider1时,主机名是provider9711 hostname: provider9711 prefer-ip-address: true client: serviceUrl: # 将自己注册到eureka1,2Eureka上面去, defaultZone: http://root:root@eureka1:9701/eureka/
原因是SpringCloud(Finchley.SR2)以上版本默认开启的csrf验证,
解决方案是重写配置文件
@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); super.configure(http); }}
还有一种情况Eureka 服务端也会出现
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
eureka.client.register-with-eureka=trueeureka.client.fetch-registry=true
只需将上面的配置改成false
转载地址:http://bhmdi.baihongyu.com/