Swagger servers에 로컬및 배포환경 서버 추가

no.oneho·2023년 10월 30일
0

HTTPS 배포해보기

목록 보기
3/3

nginx로 https를 적용 한 후 https가 적용된 스웨거에서 API를 호출 해봤는데

mixed contents error가 떴다..
이 오류는 cors 중 하나로.. http < - > https 사이 통신에서 나오는 에러이다.

분명 https로 프록시를 잘 설정했는데 왜 그러는걸까?

swagger에서 url에 포트가 지정되지 않으면 기본으로 사용되는 url은 80포트를 사용한다, 즉 443으로 접속을 했지만 API서버는 80 포트인 http를 바라보고 있어
정작 접속은 https로 했지만 스웨거상에서 API를 호출 하면 요청 url이 http로 간다.

나는 처음에 내가 nginx 프록시 설정을 잘못한 줄 알고 ubuntu와 수많은 삽질을 했었는데
알고보니 swagger 쪽에 server를 박아주면 되는 부분이였다~

swagger 3.0 기준 해결방법이다.

@Component
public class Workaround implements WebMvcOpenApiTransformationFilter {

    @Override
    public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {
        OpenAPI openAPI = context.getSpecification();
        Server localServer = new Server();
        localServer.setDescription("local server");
        localServer.setUrl("http://localhost:8080");

        Server prodHttpsServer = new Server();
        prodHttpsServer.setDescription("prod Https Server");
        prodHttpsServer.setUrl("https:배포환경.com");

        Server prodHttpServer = new Server();
        prodHttpServer.setDescription("prod Http Server");
        prodHttpServer.setUrl("ec2.url:8080");

        openAPI.setServers(Arrays.asList(localServer, prodHttpsServer, prodHttpServer));
        return openAPI;
    }

    @Override
    public boolean supports(DocumentationType delimiter) {
        return delimiter.equals(DocumentationType.OAS_30);
    }
}
WebMvcOpenApiTransformationFilter

를 상속받아 내가 사용할 서버들을 세팅해준다.

그럼 스웨거 servers 안에 요청 url을 미리 정의한 서버로 지정해 줄 수 있다.

Request URL이 https 로 잘 가고 응답도 잘 오는것을 확인할 수 있다!!!!

profile
안녕하세요 백엔드 개발자를 지망하고있는 노원호라고합니다.

0개의 댓글

관련 채용 정보