[Swagger UI] Failed to load remote configuration.

Tae Woo Kim·2024년 7월 21일

Java

목록 보기
2/6

배경

http://localhost:8080/api/v1/swagger-ui/index.html 에 들어가면 이런 식으로 나오지 않는다.

문제

  1. Spring Security를 적용했기에 JWT토큰이 없어서 그런 것이다.
  2. SecurityConfig에 requestMatcher의 url이 잘못 추가되어있는 것이다.
  3. Swagger Ui에 url 설정을 해주지 않았다.

문제 파악

  • http://localhost:8080/v1/api-docs/swagger-config 이 링크에 요청을 보냈는데 404가 나오네?
  • 저 링크 들어가보자
  • 링크 들어와보니 context-path가 없구나

해결

SecurityConfig.java

	@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        // ... 생략
        http
                .csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(req ->
                        req
                                .requestMatchers(
                                        "/auth/**",
                                        "/v3/api-docs/**",
                                        "/swagger-ui/**"
                                )
                                .permitAll()
                                .anyRequest()
                                .authenticated()
                )
        // ... 생략

Swagger 관련 url을 추가해준다 ("/v3/api-docs/**", "/swagger-ui/**")

application.yml

# application.yml

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    config-url: /api/v1/v3/api-docs/swagger-config
    url: /api/v1/v3/api-docs
  api-docs:
    path: /v3/api-docs
  packages-to-scan: com.written.app.controller

config-url, url 앞에 현재 context-path인 /api/v1을 추가해준다.

결과

별개로

여기서 드는 의문점은, context-path를 보통 /api/v1으로 하는지? 아니면 아예 context-path를 안주고 Controller에서 한땀한땀 작성하는지 궁금해진다.

왜냐면 /api/v1/v3/api-docs/swagger-config에서 v1 v3가 연속으로 나오는게 어색하게 느껴진다.

참조

Spring swagger 사용법

0개의 댓글