【问题标题】:Wrong "Generated server url" in springdoc-openapi-ui (Swagger UI) deployed behind proxy在代理后面部署的 springdoc-openapi-ui(Swagger UI)中的“生成的服务器 url”错误
【发布时间】:2020-06-22 19:33:47
【问题描述】:

带有 springdoc-openapi-ui (Swagger UI) 的 Spring Boot 2.2 应用程序运行 HTTP 端口。 应用程序部署到 Kubernetes,Ingress 将 HTTPS 请求从集群外部路由到服务。

在这种情况下,https://example.com/api/swagger-ui.html 上的 Swagger UI 有错误的“生成的服务器 url”-http://example.com/api。虽然应该是https://example.com/api

虽然通过 HTTPS 访问 Swagger UI,但生成的服务器 URL 仍然使用 HTTP。

【问题讨论】:

    标签: spring-boot swagger swagger-ui openapi springdoc-openapi-ui


    【解决方案1】:

    如果接受的解决方案不适合您,那么您始终可以通过定义 bean 手动设置 url。

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

    并且可以通过属性定义url并在此处注入。

    【讨论】:

      【解决方案2】:

      我有同样的问题。下面对我有用。

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

      【讨论】:

        【解决方案3】:

        springdoc-openapiFAQ 有一个部分How can I deploy the Doploy springdoc-openapi-ui, behind a reverse proxy?

        FAQ 部分可以扩展。

        确保 X-Forwarded 标头由您的代理(X-Forwarded-ForX-Forwarded-Proto 等)发送。

        如果您使用 Undertow (spring-boot-starter-undertow),请设置属性 server.forward-headers-strategy=NATIVE 以使 Web 服务器本机处理 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}。默认情况下,10/8、192.168/16、169.254/16 和 127/8 中的 IP 地址是受信任的。

        或者,对于 Tomcat 设置属性server.forward-headers-strategy=FRAMEWORK

        有用的链接:

        【讨论】:

        • FAQ链接失效,正确的是springdoc.org/…
        • 我正在使用server.forward-headers-strategy=FRAMEWORK,但仍然可以看到生成的url是http
        • 即使将属性设置为 FRAMEWORK ,我仍然在生成的服务器 url 中得到 http
        【解决方案4】:

        下面对我有用。

        @OpenAPIDefinition(servers = {@server(url = "/", description = "Default Server URL")})
        @SpringBootApplication
        class App{
        // ...
        }
        

        @OpenAPIDefinition(servers = {@server(url = "/", description = "Default Server URL")})
        @Configuration
        public class OpenAPIConfig {
        @Bean
            public OpenAPI customOpenAPI() {
                return new OpenAPI()
                        .info(new Info().title("App name")
                                .termsOfService("http://swagger.io/terms/")
                                .license(new License().name("Apache 2.0").url("http://springdoc.org")));
            }
        }
        

        Generated server url is HHTP - issue

        【讨论】:

          最近更新 更多