Я пытаюсь настроить простую систему с некоторыми микросервисами Spring Boot.Среди бизнес-систем есть шлюз, сервер обнаружения (Eureka) и сервер конфигурации (в данный момент они не готовы).Это первая топология обнаружения, в которой сервер Eureka также является клиентом сервера конфигурации, а сервер конфигурации регистрируется в Eureka.(Распределение / обработка сеанса Redis с сервера шлюза также на рисунке, но я думаю, что это не влияет на проблему, описанную ниже.)
Итак, сначала я запускаю сервер конфигурации, все выглядит правильно.Некоторые исключения, пока я не включу сервер Eureka, который успешно получает свою конфигурацию с сервера Config.Я знаю, что потому, что там определен пользовательский порт, который прослушивает сервер.
Я вижу это в журнале сервера de Eureka:
2018-12-15 20:51:03.381 INFO 3109 --- [nio-9002-exec-2] c.n.e.registry.AbstractInstanceRegistry : Registered instance CONFIG-SERVER/192.168.0.9:config-server:9001 with status UP (replication=false)
Что выглядит хорошо, ноСервер конфигурации записывает это в журнал:
2018-12-15 20:51:03.401 INFO 3046 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_CONFIG-SERVER/192.168.0.9:config-server:9001 - registration status: 204
204 - НЕТ КОНТЕНТА.Это проблема, или это нормально?
Если вам нужно что-то еще от меня, чтобы ответить на этот вопрос, не стесняйтесь спрашивать, я обновляю этот пост с кодом и / или конфигурации.
ОБНОВЛЕНИЕ согласно запросу:
Config server application.yml:
server:
port: 9001
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: file://${user.home}/application-config
clone-on-start: true
security:
user:
name: configUser
password: configPassword
eureka:
client:
serviceUrl:
defaultZone: http://discUser:discPassword@localhost:9002/eureka/
Сервер обнаружения bootstrap.yml:
spring:
application:
name: discovery-server
cloud:
config:
name: discovery-server
uri: http://localhost:9001
username: configUser
password: configPassword
Сервер обнаружения Discovery-server.yml:
server:
port: 9002
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:9002/eureka
spring:
redis:
host: localhost
port: 6379
Конфигурация безопасности сервера обнаружения:
@Configuration
@EnableWebSecurity
@Order(1)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("discUser"). password("discPassword").roles("SYSTEM").build());
return manager;
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(NoOpPasswordEncoder.getInstance())
.withUser("discUser")
.password("discPassword")
.roles("SYSTEM");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
.csrf()
.disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Configuration
// no order tag means this is the last security filter to be evaluated
public static class AdminSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/eureka/**")
.hasRole("USER")
.and()
.formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(NoOpPasswordEncoder.getInstance())
.withUser("discUser")
.password("discPassword")
.roles("USER");
}
}
}