部署在代理后面的 springdoc-openapi-ui(Swagger UI)中错误的“生成的服务器 url”

问题描述 投票:0回答:6

带有 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
.

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

spring-boot swagger swagger-ui openapi springdoc-openapi-ui
6个回答
15
投票

我有同样的问题。下面为我工作。

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

9
投票

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

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

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


5
投票

springdoc-openapi
常见问题解答有一个部分我如何部署Doploy
springdoc-openapi-ui
,在反向代理后面?
.

常见问题解答部分可以扩展。

确保 X-Forwarded 标头由您的代理发送(

X-Forwarded-For
X-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
.

有用的链接:


3
投票

如果你有非默认上下文路径

@Configuration
public class SwaggerConfig {
    
    @Bean
    public OpenAPI openAPI(ServletContext servletContext) {
        Server server = new Server().url(servletContext.getContextPath());
        return new OpenAPI()
                .servers(List.of(server))
                // ...
    }
}

0
投票

使用@Server 注释使其默认为“/”。这将使 swagger API 使用

https

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.servers.Server;

@OpenAPIDefinition(servers = {@Server(url = "/", description = "Default Server URL")})
public class FormService implements ApplicationRunner {
....
}

-1
投票

下面为我工作。

@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")));
    }
}

生成的服务器 url 是 HHTP - 问题

© www.soinside.com 2019 - 2024. All rights reserved.