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

jslywgbw  于 2022-11-06  发布在  Spring
关注(0)|答案(5)|浏览(447)

带有springdoc-openapi-ui(Swagger UI)的Sping Boot 2.2应用程序运行HTTP端口。该应用程序部署到Kubernetes,入口将HTTPS请求从集群外部路由到服务。
在这种情况下,在https://example.com/api/swagger-ui.html可用的Swagger UI具有错误的“生成的服务器URL”-http://example.com/api。而它应该是https://example.com/api
虽然通过HTTPS访问Swagger UI,但生成的服务器URL仍使用HTTP。

j9per5c4

j9per5c41#

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

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

41zrol4v2#

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

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

而url可以通过一个属性定义并注入到这里。

nbnkbykc

nbnkbykc3#

springdoc-openapi常见问题解答中有一节如何在反向代理后面部署Doploy springdoc-openapi-ui?。
FAQ部分可以扩展。
确保X转发的标头是由您的代理发送的(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属性,并确保在server.tomcat.internal-proxies=192\\.168\\.\\d{1,3}\\.\\d{1,3}属性中列出要信任的所有内部代理的IP地址。默认情况下,10/8、192.168/16、169.254/16和127/8中的IP地址是受信任的。
或者,对于Tomcat,设置属性server.forward-headers-strategy=FRAMEWORK
有用的链接:

xe55xuns

xe55xuns4#

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

@Configuration
public class SwaggerConfig {

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

y1aodyip5#

下面对我有用。

@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

相关问题