Клиент Spring Cloud Config не получает конфигурацию, когда Spring Security активен на сервере Spring Cloud Config - PullRequest
2 голосов
/ 19 февраля 2020

Когда я запускаю сервер конфигурации Spring Cloud без Spring Security, служба извлекает конфигурацию без проблем, но когда я активирую Spring Security, она не получает файлы конфигурации. Кажется, выдает ошибку 401 http. Я проверил правильность имени пользователя и пароля, также попробовал способ аутентификации user:password@url с той же проблемой.

Если я захожу на URL http://localhost:8888/service/default прямо в браузере и ввожу имя пользователя и пароль, отображаются конфиги.

Буду признателен за любую помощь, я не уверен, есть ли проблема с моей облачной конфигурацией или моей конфигурацией безопасности.

Версия Spring Boot: '2.2.4.RELEASE'
spring-cloud-config-server version: '2.2.1.RELEASE'
Система сборки: Gradle
Java 8

Эта конфигурация всегда дает сбой, я пытался добавить ее в существующие службы, которые у меня были и это не сработало, поэтому я создал новый сервер конфигурации и новый клиент через инициализатор пружины на https://start.spring.io/ с указанным ниже конфигом и все еще не работает.

Журнал когда защита активна:

2020-02-19 14:29:16.553  INFO 14996 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
2020-02-19 14:29:16.577 DEBUG 14996 --- [           main] o.s.web.client.RestTemplate              : HTTP GET http://localhost:8888/service/default
2020-02-19 14:29:16.634 DEBUG 14996 --- [           main] o.s.web.client.RestTemplate              : Accept=[application/json, application/*+json]
2020-02-19 14:29:16.647 DEBUG 14996 --- [           main] o.s.web.client.RestTemplate              : Response 401 UNAUTHORIZED
2020-02-19 14:29:16.652  WARN 14996 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: 401 : [{"timestamp":"2020-02-19T12:29:16.642+0000","status":401,"error":"Unauthorized","message":"Unauthorized","path":"/service/default"}]

Журнал, когда защита отключена / разрешить все

2020-02-19 12:43:13.756  INFO 4972 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
2020-02-19 12:43:17.563  INFO 4972 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=service, profiles=[default], label=null, version=fb9ccb6e46098bfe425130d6447a0797206e5c2f, state=null

файл конфигурации сервера application.yml
github uri скрыт, подключение к частному репо не является проблемой.

server:
  port: 8888

spring:
  application:
    name: config-server
  security:
    user:
      name: 'root'
      password: '1234'
  cloud:
    config:
      server:
        git:
          uri: <github-uri>
          ignore-local-ssh-settings: false
          strict-host-key-checking: false
          private-key: 'classpath:resources/id_rsa'

файл service application.yml

spring:
  application:
    name: service
  cloud:
    config:
      uri: http://localhost:8888
      username: 'root'
      password: '1234'
      fail-fast: true

веб-безопасность очень проста c, но ниже приведена конфигурация безопасности:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    // Secure the endpoints with HTTP Basic authentication
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/**").fullyAuthenticated();
        http.httpBasic().and().exceptionHandling();
    }
}

1 Ответ

2 голосов
/ 20 февраля 2020

Вы должны использовать bootstrap.yaml (не application.yaml) для клиентского приложения.

Это работает без защиты только потому, что ваш клиент использует конфигурацию по умолчанию, которая не имеет имени пользователя и пароля. Когда вы включаете защиту, он возвращает 401, потому что имя пользователя и пароль по умолчанию пусты.

...