Я не могу зарегистрировать микросервис на Eureka Server с помощью Spring Security.
Я попробовал почти все решения в Интернете. Но я не решил это.
Версия Spring Boot: 2.1.3.RELEASE
Spring Cloud: Greenwich.RELEASE
Вот моя конфигурация с сервером Eureka:
spring:
application:
name: registration-center
security:
user:
name: eureka
password: 123456
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
service-url:
default-zone: http://eureka:123456@${eureka.instance.hostname}:${server.port}/eureka/
server:
enable-self-preservation: false
И это конфигурация Eureka Client:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: route_service_user
uri: lb://SERVICE-USER
predicates:
- Path=/user/**
application:
name: gateway-client
server:
port: 8901
eureka:
client:
servers-url:
default-zone: http://eureka:123456@localhost:8761/eureka
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: true
hostname: localhost
Я использую зависимости Spring Security и не могу зарегистрировать клиента Eureka на сервере Eureka. Вот исключение:
2019-05-11 20:01:07.454 WARN 3864 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator : There was a problem with the instance info replicator
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.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.8.jar:1.9.8]
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.9.8.jar:1.9.8]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_201]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_201]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_201]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_201]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_201]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_201]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]
Я также отключил csrf в классе WebSecurityConfig:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/actuator/**").permitAll()
.anyRequest()
.authenticated()
.and().httpBasic();
}
}
Все это не сработало вообще.
Но если я удалю зависимость безопасности Spring, она будет успешной.
Должно быть, что-то не так в моей конфигурации, но я не могу понять это.
Не могли бы вы помочь мне решить эту проблему?
Большое спасибо!