Невозможно исключить / info и / health / {* path} при использовании Spring Actuator - PullRequest
2 голосов
/ 06 марта 2020

Я использую Spring Actuator (версия 2.2.4.RELEASE) для генерации конечной точки проверки работоспособности на /localhost:8080/my-app/actuator/health, которая работает правильно.

Это генерирует 3 конечные точки, которые отображаются при посещении /actuator и отображаются в Swagger (версия 2):

  1. /actuator/health
  2. /actuator/health/{*path} (на моей странице чванства это выглядит как /actuator/health/**)
  3. /actuator/info

По причинам AWS у меня проблемы с health/** и я хочу удалить его (и я хочу удалить /info, поскольку он мне не нужен).

Я попытался добавить следующие вещи в мой application.properties файл:

management.endpoints.web.exposure.exclude=health,info

и

management.endpoints.jmx.exposure.exclude=health,info

, но это не имеет никакого значения (они все еще генерируется). Я пытался использовать *, чтобы увидеть, заставляет ли это исчезать все конечные точки, но это тоже ничего не меняет.

Есть идеи, как решить эту проблему?

EDIT 1

Я обнаружил, что файл свойств перезаписывается другим. Итак, используя следующие команды:

management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true

Получает избавление от конечной точки /actuator/info. Однако мне все еще нужно избавиться от /actuator/health/{*path} и сохранить конечную точку /actuator/health.

Ответы [ 2 ]

3 голосов
/ 10 марта 2020

Как указано в Экспонирование конечных точек раздела руководства по приводу, в Интернете по умолчанию доступны две конечные точки: health и info.

Как вы правильно заметили, это можно изменить с помощью :

  • management.endpoints.web.exposure.exclude
  • management.endpoints.web.exposure.include

свойства (исключая более высокий приоритет).

Таким образом, вы можете легко избавиться от конечной точки info.

Теперь конечная точка работоспособности предоставляет 2 URL-адреса:

  • /actuator/health
  • /actuator/health/{*path}

Мне неясно, какова ваша мотивация оставить первое и отключить второе, но я проверил, что у вас есть как минимум 2 варианта:

Вариант 1 - замените health на ваш собственная реализация

Вам просто нужно:

Вариант 2: оставить /actuator/health, но удалить /actuator/health/{*path}

Обе операции определено в org.springframework.boot.actuate.health.HealthEndpoint

@Endpoint(id = "health")
public class HealthEndpoint extends HealthEndpointSupport<HealthContributor, HealthComponent> {

    // ...

    @ReadOperation
    public HealthComponent health() {
        HealthComponent health = health(ApiVersion.V3, EMPTY_PATH);
        return (health != null) ? health : DEFAULT_HEALTH;
    }

    @ReadOperation
    public HealthComponent healthForPath(@Selector(match = Match.ALL_REMAINING) String... path) {
        return health(ApiVersion.V3, path);
    }
}

Самый простой способ избавиться от @ReadOperation для второго метода - это:

  • скопировать HealthEndpoint в ваш проект (примечание : пакеты должны совпадать)
  • удалить аннотацию @ReadOperation в healthForPath
  • copy HealthEndpointSupport, чтобы предотвратить IllegalAccessError, вызванную загрузчиками различных классов.
0 голосов
/ 09 марта 2020

Рекомендованный способ разоблачения пользовательского интерфейса Swagger - включить только указанный c путь. Вот пример, который вы можете использовать для предоставления только /rest/* конечных точек. Вы можете заменить его любым шаблоном, который вам нужен.

private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        .title("Give a meaningful Title")
        .description("Describe your API")
        .termsOfServiceUrl("Put your T&C URL")
        .contact("Contact details")
        .license("Licence Description")
        .licenseUrl("Licence Endpoint")
        .version("API Version")
        .build();
}
private Predicate<String> paths() {
    return or(regex("/rest/.*"));
}

@Bean
public Docket newsApi() {
    return new Docket(DocumentationType.SWAGGER_2)
        .groupName("rest")
        .apiInfo(apiInfo())
        .select()
        .paths(paths())
        .build();
}

Это образец, который разрешит показывать только ваши конечные точки.

См. https://github.com/reflexdemon/shop/blob/master/src/main/java/org/shop/Application.java#L85 -L107 для примера реализации.

Демонстрация для просмотра конечной точки: https://shop.vpv.io/swagger-ui.html Войдите, используя имя пользователя stack пароль overflow для просмотра чванства.

...