带有招摇 3 openapi 的 Spring 云网关不起作用



请帮忙,我试图配置安全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;
}
网关application.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();
}

输出

输入图片描述

谢谢。

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

springdoc-openapi v1.6.12

也许这对你有帮助:

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);
}

最新更新