这篇文章主要介绍“Gateway+swagger2配置聚合文档的方法是什么”,在日常操作中,相信很多人在Gateway+Swagger2配置聚合文档的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”G
这篇文章主要介绍“Gateway+swagger2配置聚合文档的方法是什么”,在日常操作中,相信很多人在Gateway+Swagger2配置聚合文档的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Gateway+Swagger2配置聚合文档的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
spring cloud Gateway网关模块聚合各微服务的Swagger接口文档
<!-- 网关路由代理 (仅网关)--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.5.RELEASE</version> </dependency> <!--swagger2 (网关和服务端)--> <dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>1.7.0.RELEASE</version> </dependency>
因为Swagger暂不支持WEBflux项目,所以Gateway里不能配置SwaggerConfig
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.Primary;import org.springframework.stereotype.Component;import springfox.documentation.swagger.web.SwaggerResource;import springfox.documentation.swagger.web.SwaggerResourcesProvider;import java.util.ArrayList;import java.util.List;@Component@Primarypublic class Swagger2 implements SwaggerResourcesProvider { protected static final String api_URI = "/v2/api-docs";//固定后缀 private final RouteLocator routeLocator; private final GatewayProperties gatewayProperties; //资源集合 private static List<SwaggerResource> resources;//自定义资源名称需要在这里初始化 public Swagger2(RouteLocator routeLocator, GatewayProperties gatewayProperties) { this.routeLocator = routeLocator; this.gatewayProperties = gatewayProperties; } @Override public List<SwaggerResource> get() { //做了一个简单缓存,没仔细设计,其实可有可无用处不大 if (resources == null) { resources = new ArrayList<>(); List<String> routes = new ArrayList<>(); routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); //结合配置的route-路径(Path),和route过滤,只获取有效的route节点 gatewayProperties.getRoutes().stream() .filter(routeDefinition -> routes.contains(routeDefinition.getId())) .forEach(routeDefinition -> routeDefinition.getPredicates().stream() .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") .replace("@Configuration@EnableSwagger2public class Swagger2 { //是否开启swagger,正式环境一般是需要关闭的,可根据SpringBoot的多环境配置进行设置 @Value(value = "${swagger.enabled}") private Boolean swaggerEnabled; //显示文档版本 @Value(value = "${swagger.version}") private String version; //标题 @Value(value = "${swagger.title}") private String title; //描述信息 @Value(value = "${swagger.description}") private String description; //扫描接口位置 也可以配置到Nacos中 private static final String base_package = "com.demo.controller"; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2)// 指定api类型为swagger2 .apiInfo(apiInfo())// 用于定义api文档汇总信息 // 是否开启 .enable(swaggerEnabled).select() // 扫描的路径包 .apis(RequestHandlerSelectors.basePackage(base_package)) // 指定路径处理PathSelectors.any()代表所有的路径 .paths(PathSelectors.any()).build() .pathMapping("/") .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); } //securitySchemes的ApiKey中增加一个名为“Authorization”,type为“header”的参数 private List<ApiKey> securitySchemes() { List<ApiKey> apiKeyList = new ArrayList(); apiKeyList.add(new ApiKey("Authorization", "Authorization", "header")); return apiKeyList; } private List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; List<SecurityReference> securityReferences = new ArrayList<>(); securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); return securityReferences; } private List<SecurityContext> securityContexts() { List<SecurityContext> securityContexts = new ArrayList<>(); securityContexts.add( SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) .build()); return securityContexts; } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title(title)// 文档页标题 .contact(new Contact("s","s.com","s@163.com"))// 详细信息 .version(version)// 文档版本号 .termsOfServiceUrl("www.baidu.com")// 网站地址 .description(description) .build(); }}```java
到此,关于“Gateway+Swagger2配置聚合文档的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
--结束END--
本文标题: Gateway+Swagger2配置聚合文档的方法是什么
本文链接: https://lsjlt.com/news/354515.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0