programing

springboot swagger3 "원격 구성을 로드하지 못했습니다."

elecom 2023. 7. 2. 19:02
반응형

springboot swagger3 "원격 구성을 로드하지 못했습니다."

Springdoc을 사용한 Spring Boot 2.6.3.

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.6.5</version>
        </dependency>

applicaton.yaml경로를 /v3/api-docs로 설정하거나 제거하면 기본 경로 "/v3/api-docs"를 사용합니다.html Swagger UI로 됩니다. http://localhost:8080/swagger-ui/index.html은 다음과 같습니다.

하지만 나는 아래와 같이 경로를 오버라이드하고 싶습니다.

  api-docs.path: /bus/v3/api-docs

그러면 Swagger UI에 "원격 구성 로드 실패" 오류가 표시됩니다.

load api list error

Make sure to add "/v3/api-docs/**" in configure method.
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/swagger-ui/**", "
/v3/api-docs/**");
    }
}

앱에서 Spring Security를 사용하는 경우 구성에 URL을 포함해야 합니다.당신의 프로젝트에 아래 코드를 추가해주세요.

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/swagger-ui/**", "/bus/v3/api-docs/**");
    }
}

저도 같은 문제가 있었습니다. 만약 당신이 역방향 프록시 뒤에 있다면, 수정은 application.yml에 다음 속성을 추가하는 것이었습니다.

server:
  forward-headers-strategy: framework

이것은 다음과 같은 이유로 필요합니다.

Swagger는 내부 라우팅에 의존하여 클라이언트의 관점에서 요청을 합니다.X-Forwarded 헤더를 제공하지 않고 역방향 프록시 뒤에 서비스를 배치하면 사용자가 원하는 대로 설명서를 사용할 수 없게 됩니다.

출처 -> https://medium.com/swlh/swagger-spring-boot-2-with-a-reverse-proxy-in-docker-8a8795aa3da4

브라우저에서 "빈 캐시 및 하드 새로 고침"을 수행합니다.

(@Ivan Zaitsev 덕분에) 문제를 해결했다고 생각합니다. 단지 답변에 더 명확한 설명을 추가하고 싶었습니다.

저도 api-docs.path 속성을 변경했는데 같은 문제가 있었습니다.Swagger UI 페이지의 요청을 검사하면 이전 URL에서 구성을 가져오려고 했기 때문에 Swagger-config 요청이 404를 반환합니다.

제가 api-docs.path 속성을 변경했지만, 여기 swagger-config를 검색하려는 요청 URL이 있습니다.http://localhost:8080/api/v3/api-hosts/swagger-config

브라우저 캐시와 쿠키를 지웠을 때 해결할 수 있었기 때문에 openapi-ui와 관련된 문제였던 것으로 밝혀졌습니다.세션에 데이터가 저장되어 있지 않으므로 브라우저를 인식하지 않고 테스트를 수행하는 것이 좋습니다.

SpringBoot v3를 사용하는 경우 springdoc-openapi v2를 사용해야 합니다.

https://springdoc.org/v2/

예를 들어 그라들의 경우:

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

오래된 질문이지만 답을 찾고 있을 때 여기에 왔습니다. 그래서 새로운 버전에서 작동하도록 만든 후, 제 대답을 공유하기로 결정했습니다. 아마도 누군가 유용하게 사용할 수 있을 것입니다.

이것은 스프링 보안을 위한 나의 구현입니다 - 3.1.0 및 Gradle이 있는 openApi 2.1.0:

implementation "org.springframework.boot:spring-boot-starter-security:3.1.0"
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0"
@EnableWebSecurity
public class SecurityConfiguration {
    @Bean
    SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeHttpRequests()
                .requestMatchers("/swagger-ui/**",
                        "/swagger-resources/*",
                        "/v3/api-docs/**")
                .permitAll()
                .anyRequest()
                .authenticated();
        return http.build();
    }
}

requestMatcher에서 "/bus/v3/api-docs"와 같은 경로를 지정해야 합니다.가장 좋은 방법은 하나씩 구현하는 것입니다.

  • "/**"가 작동하는지 확인합니다.
  • /bus/**가 작동하는지 확인합니다(내 경우 전체 프로젝트에 대해 설정된 기본 경로 "/api"가 있고 전체 경로는 이와 같음 - /api/swagger-ui/**가 작동하지 않았지만 /swagger-ui/**가 작동함).
  • 그런 다음 /bus/v3/**가 작동하는지 다시 확인합니다.

- 두 개의 별은 와일드카드입니다.

심지어 스웨거에 대한 제 경로는 다음과 같습니다: api/swagger-ui/index.html#/ 저는 그것이 작동하도록 하기 위해 matcher: v3/api-docs/**를 추가해야 했습니다.

언급URL : https://stackoverflow.com/questions/70906081/springboot-swagger3-failed-to-load-remote-configuration

반응형