Пользовательский интерфейс Springdoc OpenAPI не учитывает контекстный путь в "местоположении"

Настроить:

Я использую библиотеку Java springdoc-openapi-ui в версии 1.4.0 (через Maven) без какой-либо настройки в простом проекте с весенней загрузкой.

Страница Swagger создается под https://my-url.com/my-context-path/swagger-ui/index.html

и api-docs под https://my-url.com/my-context-path/v3/api-docs/

обе эти функции работают, и я могу с ними связаться. Все идет нормально!

Теперь проблема:

При простом переходе на https://my-url.com/my-context-path/swagger-ui.html я получаю HTTP-статус 302 иlocation установленный в заголовке ответа атрибут, который должен перенаправить меня на страницу swagger сверху (я полагаю).

Однако URL-адрес в locationатрибут не попадает в контекстный путь! Выглядит это так:https://my-url.com/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config

Он перенаправляет на несуществующую страницу, и я получаю код ошибки 404. Обратите внимание, что в configUrl также отсутствует контекстный путь.

Есть идеи, почему это происходит и как это можно исправить?

Эта проблема с Github казалась той же проблемой, но в конце указано, что проблема устранена: https://github.com/springdoc/springdoc-openapi/issues/37, и это для более ранней версии, чем моя.

3 ответа

Хорошо, проблема в том, что springdoc-openapi-ui не знает путь контекста вашего приложения, если он не определен в весенней загрузке, что может быть недоступно для всех.

Надеюсь, он поддерживает нестандартный заголовок X-Forwarded-Prefix которые могут быть отправлены вашим шлюзом.

В моем случае (Kubernetes) Ingress можно настроить на вашем графике, просто добавив nginx.ingress.kubernetes.io/x-forwarded-prefix: "true"

И в конфиге вашего приложения тоже нужно указать

server:
  forward-headers-strategy: framework

использовать поддержку Spring для обработки перенаправленных заголовков.

Источники:

https://github.com/kubernetes/ingress-nginx/issues/3670

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#x-forwarded-prefix-header

https://github.com/springdoc/springdoc-openapi/issues/607

Чтобы правильно настроить swagger-ui, когда настроен внешний контекстный путь, используйте следующую конфигурацию.

      springdoc.swagger-ui.config-url=/context-path/api-docs/swagger-config
springdoc.swagger-ui.url=/context-path/api-docs
springdoc.api-docs.path=/api-docs

Нет никаких известных проблем с использованием пути контекста. Как вы понимаете, № 37 решен, и это подтверждает!

Просто убедитесь, что вы следуете инструкциям по установке context-path в стандартном приложении с весенней загрузкой.

Вы можете протестировать конфигурацию вашего контекстного пути в различных демонстрационных примерах:

Если у вас есть какие-либо проблемы, вы можете зарегистрировать проблему, предоставив минимальный / воспроизводимый образец или с помощью модульных тестов, которые воспроизводят проблему.

Другие вопросы по тегам