programing

프록시 뒤에 배포된 springdoc-openapi-ui(Swager UI)의 "Generated server url"이 잘못됨

batch 2023. 7. 20. 21:48
반응형

프록시 뒤에 배포된 springdoc-openapi-ui(Swager UI)의 "Generated server url"이 잘못됨

Springdoc-openapi-ui(Swagger UI)가 있는 Spring Boot 2.2 응용 프로그램은 HTTP 포트를 실행합니다.애플리케이션은 클러스터 외부에서 서비스로 HTTPS 요청을 수신 라우팅하여 Kubernetes에 배포됩니다.

이 경우 Swagger UI는 다음 위치에서 사용할 수 있습니다.https://example.com/api/swagger-ui.html잘못된 "Generated server url"이 있습니다.http://example.com/api그래야만 하는 동안에https://example.com/api.

Swagger UI는 HTTPS에 의해 액세스되지만 생성된 서버 URL은 여전히 HTTP를 사용합니다.

저도 같은 문제가 있었어요.Below는 나를 위해 일했습니다.

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

승인된 솔루션이 작동하지 않는 경우 빈을 정의하여 항상 수동으로 URL을 설정할 수 있습니다.

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

그리고 속성을 통해 URL을 정의하고 여기에 주입할 수 있습니다.

springdoc-openapiFAQ에는 역방향 프록시 뒤에서 Doploy를 배포하려면 어떻게 해야 합니까? 섹션이 있습니다.

FAQ 섹션을 확장할 수 있습니다.

X-Forwarded 헤더가 프록시에 의해 전송되는지 확인합니다.X-Forwarded-For,X-Forwarded-Proto기타).

언더도우를 사용하는 경우(spring-boot-starter-undertow), 속성 설정server.forward-headers-strategy=NATIVE웹 서버가 X-Forwarded 헤더를 기본적으로 처리하도록 합니다.또한 사용하지 않을 경우 언더로우로 전환하는 것을 고려해 보십시오.

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.

유용한 링크:

기본값이 아닌 컨텍스트 경로가 있는 경우

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

@서버 주석을 사용하여 "/"로 기본 설정합니다.이렇게 하면 스웨거 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 {
....
}

Below는 나를 위해 일했습니다.

@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 - 이슈

언급URL : https://stackoverflow.com/questions/60625494/wrong-generated-server-url-in-springdoc-openapi-ui-swagger-ui-deployed-behin

반응형