反向代理背后的 Springfox Swagger UI

2023-11-25

我已经使用 Swagger API 文档配置了 Spring Boot 应用程序并配置了 Swagger UI。

我还在反向代理后面运行后端应用程序,该代理映射来自的所有请求host:port/api to backend_host:port/,当在本地主机上本地运行时,我映射localhost:8082/api。在生产中应用了类似的映射。

当我从以下位置打开 Swagger UI 时localhost:8082/api/swagger-ui.html它在标题下方显示以下几行:

[ 基本 URL: localhost:8080 ]
http://localhost:8082/api/v2/api-docs

当我调用任何休息操作时,swagger 总是尝试针对 localhost:8080 执行它,然后由于同源策略而失败。

我知道使用pathProvider但它只影响基本 URL 的路径部分,而不影响域和端口。所以我只能用它来将基本 URL 更改为 localhost:8080/api,但我需要它更改为 localhost:8082/api。有没有办法将主机动态设置为浏览器中活动的当前主机和端口?

.pathProvider (new RelativePathProvider (servletContext) {
                @Override
                public String getApplicationBasePath() {
                    return "/api";
                }
               })

在我的例子中,使用 spring-boot:2.2.6 应用程序和 springdoc-openapi-ui:1.3.0 (也嵌入了 swagger UI),我通过以下方式解决了设置服务器 URL 的代理问题:

@Configuration
public class OpenApiConfig {

  @Value("${server}")
  private String url;

  @Bean
  @Profile("prod")
  public OpenAPI customConfiguration() {
    return new OpenAPI()
        .servers(Collections
            .singletonList(new Server().url(url))) //real public URL
        .components(new Components())
        .info(new Info().title("Dummy API Docs")
            .description("Dummy REST API documentation"));
  }
}

这一变化反映在合同中(https://real-domain.com/api-docs):

OpenAPI contract

在 Swagger UI 中(https://real-domain.com/swagger-ui/index.html?configUrl=/api-docs/swagger-config)

Swagger UI server list

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反向代理背后的 Springfox Swagger UI 的相关文章

随机推荐

  • 在Java流中,peek真的只能用于调试吗?

    我正在阅读有关 Java 流的内容 并在阅读过程中发现新的东西 我发现的新事物之一是peek 功能 我在 peek 上读到的几乎所有内容都说它应该用于调试您的 Streams 如果我有一个流 其中每个帐户都有一个用户名 密码字段以及一个登录
  • 如何应用新的 Emacs C 样式来重新格式化所有源文件?

    我想使用 emacs 的 Google 格式化功能重新格式化所有源文件 google c style el see here 如何立即将此功能应用于我的所有源文件 以便它们都按照 Google 风格正确格式化和缩进 这有几个部分 您需要想出
  • 如何制作一个在 Windows 中无法被杀死的程序?

    我们正在制作一个供公司内部使用的 Jabber 客户端 我们需要以某种方式捕获用户试图终止程序的时刻 以实际重新启动它 或者只是让用户无法终止客户端 这可能吗 我们的 Jabber 客户端将用 C 编写 我将如何实现这一目标 你所要求的意义
  • Java 中私有静态嵌套类内的访问修饰符

    我在 Java 中有一个 私有静态 嵌套类 此类中的字段和方法的访问修饰符有何意义 我已经尝试过公共和私人 对我的申请没有影响 public class MyList
  • 删除域后的尾部斜杠

    这是我的 htaccess file
  • LINQ 的通配符搜索

    我想知道是否可以使用 LINQ 进行通配符搜索 我看到 LINQ 有 Contains StartsWith EndsWith 等 如果我想要 Test if it work 之类的东西怎么办 Regards 您可以使用SqlMethods
  • 在服务器上部署一段时间后无法连接数据库

    我将我的战争文件上传到我的服务器上 它在部署后完美运行 但一段时间后它显示异常 我正在使用 struts2 和 hibernate my hibernate cfg xml is
  • GLFW 3 已初始化,但还没有?

    我正在努力使用 GLFW 3 函数 glfwCreateWindow 创建窗口 我设置了一个错误回调函数 它几乎只是打印出错误号和描述 并且根据 GLFW 库尚未初始化 即使 glfwInit 函数刚刚返回成功 这是我的代码的摘录 Erro
  • ImageView 上的边框半径和阴影

    我想在 JavaFX 中应用边框半径和阴影 在 CSS3 中它将是 box shadow rgba 0 0 0 0 8 0 0 10px border radius 3px 现在我想在 JavaFX 中实现这一点 但即使是 border r
  • 必须使用mockbean而不是自动装配

    我用的是弹簧靴2 我创建了一个基本测试 RunWith SpringJUnit4ClassRunner class public class VehicleServiceImplTest private VehiculeServiceImp
  • 了解 ARKit 中的坐标空间

    我已阅读所有有关的 Apple 指南ARKit 并观看了一个全球开发者大会视频 但我不明白坐标系如何绑定到 一个真实的世界 A device 3D 场景 相互连接 我可以添加一个对象 例如SCNPlane let stripe SCNPla
  • VBA 中的公共对象模块是什么?

    我试图在 VBA 中尽可能接近函数指针 抽象类 我有一堂课叫VerificationManager并验证几个电子表格中的一堆单元格是否匹配 根据所使用的信息和电子表格 这将以不同的方式完成 我希望能够通过使用以下命令在字符串中指定要调用的方
  • 如何从 YouTube 获取频道 ID?

    我正在尝试使用以下方法从我的频道检索数据YouTube 数据 API V3 为此 我需要我的频道 ID 我尝试从我的 YouTube 帐户中找到我的频道 ID 但各种方法都失败了 如果有人给我一个建议 我会非常高兴 这是我用来检索数据的 U
  • $是什么? Powershell 中的别名?

    今天向我展示的脚本中有这样一行 If do some stuff 我从来没有见过美元符号问号别名 之前我无法通过谷歌确定它的用途 当我在 powershell 窗口中执行它时 它通常返回 True 但偶尔返回 False 我的测试似乎表明
  • CMake:包含目录的排序(如何混合基于系统和用户的包含路径?)

    我有一个 CMake 项目 其中包含并链接两个库 例如A and B 实际上它不止两个 其中之一是增强的东西 但这在这里并不重要 两者都位于通过FindSomething cmake 正确 填充标准 CMake 变量的脚本 例如通过添加包含
  • 使用 PHP 客户端库将大文件上传到 google 驱动器

    我正在尝试通过他们的 PHP 客户端库使用 Google Drive API 上传大文件 目前它失败了 因为似乎唯一可用的方法是 简单 上传方法 不幸的是 这需要您将整个文件作为数据加载 并且它达到了我的 php 内存限制 我想知道是否可能
  • 动态转换为 void 指针有实际用途吗?

    在 C 中 T q dynamic cast
  • cmake配置时出错

    抱歉 如果这不是发布此内容的正确位置 但我认为 librocket 论坛早已消亡 我有 Ubuntu 12 04 我按照构建 librocket 的步骤进行操作here 我按照步骤所述使用 cmake 但当我按 c 来配置时出现此错误 CM
  • ion-content 和 ion-footer 有不同的 $scope

    我的 ion content 中有两个输入字段 它们都附加了一个 ng model 然后在我的 ion footer 中 我有一个 ng click 我在其中调用一个函数并传入两个 ng model 当我在 ion content 中进行
  • 反向代理背后的 Springfox Swagger UI

    我已经使用 Swagger API 文档配置了 Spring Boot 应用程序并配置了 Swagger UI 我还在反向代理后面运行后端应用程序 该代理映射来自的所有请求host port api to backend host port