반응형

swagger-ui는 아래 예제처럼 url 이라는 쿼리 파라미터로 외부 리소스의 API 스펙을 임포트하여 사용할 수 있다.

https://petstore.swagger.io/?url=https://darosh.github.io/openapi-directory-lite/specs/github.com/v3.json

 

3.3.8 이후 버전부터는 XSS 보안 이슈로 인하여 해당 옵션을 일반적으로 사용할 수 없도록 변경하였다.

해당 보안 이슈는 다음을 참고한다.

 

사용해야 한다면 재량적으로 쿼리 파라미터에 queryConfigEnabled=true을 주어 사용할 수 있다.

해당 패치 노트는 다음을 참고한다.

 

필자는 swagger-ui를 v3.36.1을 사용하고 있었으며 이후 springdoc 1.6.9 버전으로 마이그레이션을 진행했다.

springdoc 1.6.9 버전은 swagger-ui 4.11.1 버전을 포함하고 있었기 때문에 위와 같은 문제를 직면했다.

 

필자는 특이하게도 springdoc을 이용하여 기본 url인 localhost:8080/swagger-ui/index.html을 사용하지 않고, 특별한 방식으로 swagger-ui를 import해서 사용했다.

관련하여 다음을 참고한다.

@Configuration
@SpringBootApplication
@EnableTransactionManagement
public class App implements WebMvcConfigurer {

  ...

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/tester/**")
        .addResourceLocations("classpath:/META-INF/resources/static/",
            "classpath:/META-INF/resources/webjars/swagger-ui/4.11.1/");
  }

 

따라서 swagger를 사용할 때는 localhost:8080/tester/index.html를 사용했고 url 쿼리 파라미터를 위해 queryConfigEnabled를 사용하였으나 동작하지 않았다.

 

혹시나 하여 기본적으로 제공하는 springdoc의 localhost:8080/swagger-ui/index.html에서도 동작하지 않았다.

 

이후, springdoc에서 제공하는 설정값을 아래와 같이 세팅하여 기동하니 queryConfigEnabled를 주지 않아도 url 옵션이 동작하였다.

springdoc:
  swagger-ui:
    query-config-enabled: true

 

 

반응형

+ Recent posts