Неверно сгенерированный URL-адрес сервера в springdoc-openapi-ui (пользовательский интерфейс Swagger), развернутый за прокси

Приложение Spring Boot 2.2 с springdoc-openapi-ui (пользовательский интерфейс Swagger) запускает HTTP-порт. Приложение развертывается в Kubernetes с Ingress, маршрутизирующими HTTPS-запросы извне кластера в службу.

В этом случае пользовательский интерфейс Swagger, доступный по адресу https://example.com/api/swagger-ui.html, имеет неправильный "URL-адрес сгенерированного сервера" - http://example.com/api. Хотя должно быть https://example.com/api.

Хотя доступ к пользовательскому интерфейсу Swagger осуществляется по HTTPS, сгенерированный URL-адрес сервера по-прежнему использует HTTP.


person Evgeniy Khyst    schedule 10.03.2020    source источник


Ответы (3)


springdoc-openapi В FAQ есть раздел Как я могу развернуть Doploy springdoc-openapi-ui за обратным прокси-сервером?.

Раздел FAQ может быть расширен.

Убедитесь, что заголовки X-Forwarded отправляются вашим прокси-сервером (X-Forwarded-For, X-Forwarded-Proto и другие).

Если вы используете Undertow (spring-boot-starter-undertow), установите свойство server.forward-headers-strategy=NATIVE, чтобы веб-сервер изначально обрабатывал заголовки X-Forwarded. Также подумайте о переходе на Undertow, если вы его не используете.

Если вы используете Tomcat (spring-boot-starter-tomcat), установите свойство server.forward-headers-strategy=NATIVE и обязательно укажите IP-адреса всех внутренних прокси-серверов, которым можно доверять, в свойстве server.tomcat.internal-proxies=192\\.168\\.\\d{1,3}\\.\\d{1,3}. По умолчанию доверенные IP-адреса в 10/8, 192.168 / 16, 169.254 / 16 и 127/8.

В качестве альтернативы для Tomcat установите свойство server.forward-headers-strategy=FRAMEWORK.

Полезные ссылки:

person Evgeniy Khyst    schedule 10.03.2020
comment
ссылка на FAQ не работает, правильная - springdoc.org/ - person Matthias Wiedemann; 29.09.2020
comment
Я использую server.forward-headers-strategy=FRAMEWORK, но по-прежнему вижу, что сгенерированный URL-адрес - http. - person Paramesh Korrakuti; 07.02.2021
comment
Даже при установке для свойства FRAMEWORK я все равно получаю http в сгенерированном URL-адресе сервера. - person Kaustubh; 15.07.2021

Если принятое решение не работает для вас, вы всегда можете установить URL-адрес вручную, определив bean-компонент.

@Bean
public OpenAPI customOpenAPI() {
    Server server = new Server();
    server.setUrl("https://example.com/api");
    return new OpenAPI().servers(List.of(server));
}

И URL-адрес может быть определен через свойство и введен сюда.

person Peter Lustig    schedule 11.05.2021

У меня была такая же проблема. Ниже работал у меня.

@OpenAPIDefinition( 
    servers = {
       @Server(url = "/", description = "Default Server URL")
    }
) 
@SpringBootApplication
public class App {
// ...
}
person user6070687    schedule 29.06.2021