| package com.ruoyi.gateway.config; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.List; | 
|   | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.cloud.gateway.config.GatewayProperties; | 
| import org.springframework.cloud.gateway.route.RouteLocator; | 
| import org.springframework.cloud.gateway.support.NameUtils; | 
| import org.springframework.context.annotation.Lazy; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.reactive.config.ResourceHandlerRegistry; | 
| import org.springframework.web.reactive.config.WebFluxConfigurer; | 
| import springfox.documentation.swagger.web.SwaggerResource; | 
| import springfox.documentation.swagger.web.SwaggerResourcesProvider; | 
|   | 
| /** | 
|  * 聚合系统接口 | 
|  * | 
|  * @author ruoyi | 
|  */ | 
| @Component | 
| public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer { | 
|     /** | 
|      * Swagger2默认的url后缀 | 
|      */ | 
|     public static final String SWAGGER2URL = "/v2/api-docs"; | 
|      | 
|     /** | 
|      * 网关路由 | 
|      */ | 
|     @Lazy | 
|     @Autowired | 
|     private RouteLocator routeLocator; | 
|      | 
|     @Autowired | 
|     private GatewayProperties gatewayProperties; | 
|      | 
|     /** | 
|      * 聚合其他服务接口 | 
|      * | 
|      * @return | 
|      */ | 
|     @Override | 
|     public List<SwaggerResource> get() { | 
|         List<SwaggerResource> resourceList = new ArrayList<>(); | 
|         List<String> routes = new ArrayList<>(); | 
|         // 获取网关中配置的route | 
|         routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); | 
|         gatewayProperties.getRoutes().stream() | 
|                 .filter(routeDefinition -> routes | 
|                         .contains(routeDefinition.getId())) | 
|                 .forEach(routeDefinition -> routeDefinition.getPredicates().stream() | 
|                         .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName())) | 
|                         .filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId())) | 
|                         .forEach(predicateDefinition -> resourceList | 
|                                 .add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs() | 
|                                         .get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL))))); | 
|         return resourceList; | 
|     } | 
|      | 
|     private SwaggerResource swaggerResource(String name, String location) { | 
|         SwaggerResource swaggerResource = new SwaggerResource(); | 
|         swaggerResource.setName(name); | 
|         swaggerResource.setLocation(location); | 
|         swaggerResource.setSwaggerVersion("2.0"); | 
|         return swaggerResource; | 
|     } | 
|      | 
|     @Override | 
|     public void addResourceHandlers(ResourceHandlerRegistry registry) { | 
|         /** swagger-ui 地址 */ | 
|         registry.addResourceHandler("/swagger-ui/**", "*/doc.html") | 
|                 .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); | 
|     } | 
| } |