SpringCloud(Finchley.SR2) Eureka注册时候提示Cannot execute request on any known server

在搭建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 server

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) ~[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: 9711
eureka:
  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验证,

解决方案是重写配置文件

@EnableWebSecurity
public 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=true
eureka.client.fetch-registry=true

只需将上面的配置改成false



 

你可能感兴趣的:(SpringCloud)