【问题标题】:Spring cloud gateway with swagger 3 openapi doesn't work带有 swagger 3 openapi 的 Spring Cloud Gateway 不起作用
【发布时间】:2023-02-02 15:26:07
【问题描述】:

请帮助,我尝试配置安全 permissionAll 端点但它仍然不起作用:

招摇配置

@Bean
    @Lazy(false)
    public List<GroupedOpenApi> apis(SwaggerUiConfigParameters swaggerUiConfigParameters, RouteDefinitionLocator locator) {
        List<GroupedOpenApi> groups = new ArrayList<>();
        List<RouteDefinition> definitions = locator.getRouteDefinitions().collectList().block();
        for (RouteDefinition definition : definitions) {
            System.out.println("id: " + definition.getId()+ "  "+definition.getUri().toString());
        }
        definitions.stream().filter(routeDefinition -> routeDefinition.getId().matches(".*-service")).forEach(routeDefinition -> {
            String name = routeDefinition.getId().replaceAll("-service", "");
            swaggerUiConfigParameters.addGroup(name);
            GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
        });
        return groups;
    }

网关应用.yml

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: system-service
          uri: lb://system-service
          predicates:
            - Path=/system/**
          filters:
            - RewritePath=/system/(?<path>.*), /$\{path}
        - id: openapi
          uri: http://localhost:${server.port}
          predicates:
            - Path=/v3/api-docs/**
          filters:
            - RewritePath=/v3/api-docs/(?<path>.*), /$\{path}/v3/api-docs

WebFluxSecurityConfig


private final String[] whiteListSwagger = {
        "/v3/api-docs/**", "/swagger-ui/**", "/webjars/**", "/swagger-ui.html"
};

/**
 * Spring security filter chain security web filter chain.
 *
 * @param http the http
 * @return the security web filter chain
 */
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
    http.cors().configurationSource(corsConfigurationSource()).and().csrf().disable()
            .authorizeExchange()
            .pathMatchers(whiteListOauth2).permitAll()
            .pathMatchers(whiteListSwagger).permitAll()
            .anyExchange().authenticated()
            .and()
            .oauth2ResourceServer()
            .jwt();

    return http.build();
}

输出

enter image description here

谢谢。

我试图阅读文档,但仍然没有解决问题。

springdoc-openapi v1.6.12

【问题讨论】:

    标签: swagger-ui spring-cloud-gateway


    【解决方案1】:

    也许这会帮助你:

    https://github.com/springdoc/springdoc-openapi/issues/1678

      @Bean
      MultipleOpenApiWebFluxResource multipleOpenApiResource(
          List<GroupedOpenApi> groupedOpenApis,
          ObjectFactory<OpenAPIService> defaultOpenAPIBuilder,
          AbstractRequestService requestBuilder,
          GenericResponseService responseBuilder,
          OperationService operationParser,
          SpringDocConfigProperties springDocConfigProperties,
          SpringDocProviders springDocProviders) {
        return new MultipleOpenApiWebFluxResource(
            groupedOpenApis,
            defaultOpenAPIBuilder,
            requestBuilder,
            responseBuilder,
            operationParser,
            springDocConfigProperties,
            springDocProviders);
      }
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2018-11-14
      • 2021-07-01
      • 2021-03-27
      • 2020-07-31
      • 1970-01-01
      • 2020-04-01
      • 2021-12-21
      • 2021-04-02
      相关资源
      最近更新 更多