文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Gateway+Swagger2配置聚合文档的方法是什么

2023-07-05 19:02

关注

这篇文章主要介绍“Gateway+Swagger2配置聚合文档的方法是什么”,在日常操作中,相信很多人在Gateway+Swagger2配置聚合文档的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Gateway+Swagger2配置聚合文档的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Spring Cloud Gateway网关模块聚合各微服务的Swagger接口文档

效果如下图

Gateway+Swagger2配置聚合文档的方法是什么

相关pom依赖

        <!-- 网关路由代理 (仅网关)-->        <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>

Gateway配置

因为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配置聚合文档的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯