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