java Spring Boot with Swagger - 无法加载远程配置

我有一个 Java 11 Spring Boot 2.5.1 应用程序。

Swagger 通过 http 在本地工作:

我添加了 Swagger,它可以在我的本地主机上完美运行:

http://localhost:8085/swagger-ui/index.html#/

enter image description here

Swagger 不能通过 https 远程工作:

但是,当我将其部署到远程服务器时,出现以下错误:

https://mycompany.co/pow-wow/swagger-ui/index.html#/

enter image description here

错误

无法加载远程配置。

注意:远程服务器是通过 https 访问的。

可以在远程服务器上访问 REST 端点。

例如GET https://mycompany.co/pow-wow/powwow/test-me 按预期返回 200。

问题

如何通过远程服务器访问 Swagger?

代码

pom.xml

    <!-- Swagger -->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.6.7</version>
    </dependency>

WebSecurityConfig.java

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //http.csrf().disable().authorizeRequests().antMatchers("/powwow/*").hasRole("USER").and().httpBasic();
        //http.csrf().disable().authorizeRequests().antMatchers("/*").permitAll().and().httpBasic();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests().antMatchers("/soapWS/**").permitAll().and()
                .authorizeRequests().antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll().and()
                .authorizeRequests().antMatchers("/actuator/**").permitAll()
                .anyRequest().authenticated().and()
                .httpBasic().and()
                .csrf().disable();
    }
}

更多信息:

访问 Swagger 时在浏览器中查看网络流量时。

在本地,有一个电话:

http://localhost:8085/v3/api-docs/swagger-config

返回:

enter image description here

{"configUrl":"/v3/api-docs/swagger-config","oauth2RedirectUrl":"http://localhost:8085/swagger-ui/oauth2-redirect.html","url":"/v3/api-docs","validatorUrl":""}

远程调用:

https://mycompany.co/v3/api-docs/swagger-config

它返回一个 302

enter image description here

但是 https://mycompany.co/pow-wow/v3/api-docs/swagger-config

返回:

{"configUrl":"/v3/api-docs/swagger-config","oauth2RedirectUrl":"http://localhost:8085/swagger-ui/oauth2-redirect.html","url":"/v3/api-docs","validatorUrl":""}

因此,这表明该问题与调用中缺少 /pow-wow 上下文路径有关。

stack overflow java Spring Boot with Swagger - Failed to load remote configuration
原文答案
author avatar

接受的答案

您应该尝试添加

springdoc:
  swagger-ui:
    config-url: /pow-wow/v3/api-docs/swagger-config
    url: /v3/api-docs

到您的 application.properties。在您提供的示例中

https://mycompany.co/pow-wow/v3/api-docs/swagger-config

它表明您的路径中有“/pow-wow/”。 Swagger 需要知道从哪里获取其配置。


答案:

作者头像

尝试将其添加到您的安全配置类中

@Override
public void configure(WebSecurity web) throws Exception {
   web.ignoring().antMatchers("/swagger-ui/**", "/v3/api-docs/**");
}
作者头像

如果安全配置允许swagger,那是因为兑现,请在清除浏览器现金或浏览器隐身模式后尝试。

作者头像

我遇到过同样的问题 :

  • 使用 mvn spring-boot:run :好的
  • 在我的本地 Tomcat 服务器上:好的
  • 在我组织的 Tomcat 服务器上:KO(无法加载远程配置)

原因是我组织的反向代理阻止了应用程序的环回调用。

相关问题