반응형
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
반응형