返回顶部
首页 > 资讯 > 精选 >springcloud gateway集成knife4j的方法是什么
  • 231
分享到

springcloud gateway集成knife4j的方法是什么

2023-07-05 12:07:10 231人浏览 薄情痞子
摘要

这篇文章主要介绍“SpringCloud gateway集成knife4j的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springcloud gateway集成knife4j的方法是什

这篇文章主要介绍“SpringCloud gateway集成knife4j的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springcloud gateway集成knife4j的方法是什么”文章能帮助大家解决问题。

sprinGCloud-gateway集成knife4j

环境信息

环境信息

  • spring-boot:2.6.3

  • spring-cloud-alibaba:2021.0.1.0

  • knife4j-openapi2-spring-boot-starter:4.0.0

准备工作

微服务&网关引入依赖

<dependency>    <groupId>com.GitHub.xiaoymin</groupId>    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>    <version>4.0.0</version></dependency>

微服务集成knife4j 第一步:编写Knife4jApiInfoProperties

import com.ideaaedi.springcloud.jd.commonspring.config.Knife4jConfig;import lombok.Data;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Data@Componentpublic class Knife4jApiInfoProperties {            @Value("${api-info.base-package:com}")    private String basePackage;            @Value("${api-info.enable-security:true}")    private boolean enableSecurity;            @Value("${api-info.title:}")    private String title;            @Value("${api-info.description:api info}")    private String description;            @Value("${api-info.version:1.0.0}")    private String version;            @Value("${api-info.contact-name:JustryDeng}")    private String contactName;            @Value("${api-info.contact-url:https://gitee.com/JustryDeng/projects}")    private String contactUrl;            @Value("${api-info.contact-email:13548417409@163.com}")    private String contactEmail;}

编写配置类Knife4jConfig

import com.ideaaedi.springcloud.jd.commonds.constant.BaseConstant;import com.ideaaedi.springcloud.jd.commonspring.config.properties.Knife4jApiInfoProperties;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.WEB.servlet.config.annotation.ResourceHandlerReGIStry;import org.springframework.web.servlet.config.annotation.WebmvcConfigurer;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.service.ApiKey;import springfox.documentation.service.AuthorizationScope;import springfox.documentation.service.Contact;import springfox.documentation.service.SecurityReference;import springfox.documentation.service.SecurityScheme;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spi.service.contexts.SecurityContext;import springfox.documentation.spring.web.plugins.Docket;import java.util.ArrayList;import java.util.List;@Slf4j@Configurationpublic class Knife4jConfig implements WebMvcConfigurer {            public static String[] RESOURCE_URLS = new String[]{"/webjars.*"));        return result;    }        private SecurityContext getContextByPath(String pathRegex) {        return SecurityContext.builder()                .securityReferences(defaultAuth())                .forPaths(PathSelectors.regex(pathRegex))                .build();    }        private List<SecurityReference> defaultAuth() {        List<SecurityReference> result = new ArrayList<>();        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];        authorizationScopes[0] = authorizationScope;        result.add(new SecurityReference("Authorization", authorizationScopes));        return result;    }    }

放行相关静态资源

对于管控了权限的应用,应放行以下资源

# 需要放行的资源已经定义进上面编写的Knife4jConfig中public static String[] RESOURCE_URLS = new String[]{"/webjars@RestControllerpublic class Knife4jGatewayConfig {        private final SecurityConfiguration securityConfiguration;        private final UiConfiguration uiConfiguration;        private final swaggerResourceAdapter swaggerResourceAdapter;        public Knife4jGatewayConfig(@Autowired(required = false) SecurityConfiguration securityConfiguration,                                @Autowired(required = false) UiConfiguration uiConfiguration,                                SwaggerResourceAdapter swaggerResourceAdapter) {        this.securityConfiguration = securityConfiguration;        this.uiConfiguration = uiConfiguration;        this.swaggerResourceAdapter = swaggerResourceAdapter;    }            @GetMapping("/swagger-resources/configuration/security")    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {        return Mono.just(new ResponseEntity<>(                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));    }            @GetMapping("/swagger-resources/configuration/ui")    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {        return Mono.just(new ResponseEntity<>(                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));    }            @GetMapping("/swagger-resources")    public Mono<ResponseEntity<List<SwaggerResource>>> swaggerResources() {        return Mono.just(new ResponseEntity<>(swaggerResourceAdapter.get(), HttpStatus.OK));    }            @GetMapping("/favicon.ico")    public Mono<ResponseEntity<?>> favicon() {        return Mono.just(new ResponseEntity<>(null, HttpStatus.OK));    }            @Slf4j    @Component    public static class SwaggerResourceAdapter implements SwaggerResourcesProvider {                        @Value("${spring.cloud.gateway.discovery.locator.enabled:false}")        private boolean autoCreateRouter;                @Value("${spring.application.name:}")        private String applicationName;                @Resource        private RouteLocator routeLocator;                @Resource        private GatewayProperties gatewayProperties;                        @Override        public List<SwaggerResource> get() {            List<SwaggerResource> finalResources;            Set<String> routes = new LinkedHashSet<>(16);            // 获取所有路由的id            routeLocator.getRoutes().subscribe(route -> {                String routeId = route.getId();                routeId = routeId.replace("ReactiveCompositeDiscoveryClient_", "");                routes.add(routeId);            });            // 没有开启自动创建路由,那么走配置文件中配置的路由            if (!autoCreateRouter) {                finalResources = new ArrayList<>(16);                gatewayProperties.getRoutes().stream()                        // 过滤出配置文件中定义的路由                        .filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(route -> {                            route.getPredicates().stream()                                    // 过滤出设置有Path Predicate的路由                                    .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))                                    // 根据路径拼接成api-docs路径,生成SwaggerResource                                    .forEach(predicateDefinition -> finalResources.add(swaggerResource(route.getId(),                                            predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")                                                    .replace("**", "v2/api-docs"))));                        });            } else {                finalResources = routes.stream().map(routeId -> swaggerResource(routeId, routeId + "/v2/api-docs")).collect(Collectors.toList());            }            List<SwaggerResource> resources = new ArrayList<>(finalResources);            // resources过滤掉网关的SwaggerResource, 我们一般也不会在网关中编写业务controller            if (StringUtils.isNotBlank(applicationName)) {                resources = resources.stream().filter(x -> !applicationName.equalsIgnoreCase(x.getName())).collect(Collectors.toList());            }            // 排序            resources.sort(Comparator.comparing(x -> x.getName().length()));            return resources;        }                        private SwaggerResource swaggerResource(String name, String location) {            log.info("name:{},location:{}", name, location);            SwaggerResource swaggerResource = new SwaggerResource();            swaggerResource.setName(name);            swaggerResource.setLocation(location);            swaggerResource.setSwaggerVersion("2.0");            return swaggerResource;        }            }}

测试验证

启动微服务后,访问{网关}/doc.html完成验证

springcloud gateway集成knife4j的方法是什么

关于“springcloud gateway集成knife4j的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: springcloud gateway集成knife4j的方法是什么

本文链接: https://lsjlt.com/news/351496.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springcloud gateway集成knife4j的方法是什么
    这篇文章主要介绍“springcloud gateway集成knife4j的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springcloud gateway集成knife4j的方法是什...
    99+
    2023-07-05
  • springcloud-gateway集成knife4j的示例详解
    目录springcloud-gateway集成knife4j环境信息环境信息准备工作网关集成knife4j编写配置类Knife4jGatewayConfig测试验证相关资料sprin...
    99+
    2023-03-13
    springcloud gateway集成knife4j springcloud gateway
  • Springcloud Gateway相关配置方法是什么
    这篇“Springcloud Gateway相关配置方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spr...
    99+
    2023-07-05
  • SpringCloud中Gateway实现鉴权的方法是什么
    本篇内容介绍了“SpringCloud中Gateway实现鉴权的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、JWT 实现微服...
    99+
    2023-06-21
  • springboot集成springCloud中gateway时启动报错的解决方法
    本篇内容介绍了“springboot集成springCloud中gateway时启动报错的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2023-06-20
  • Gateway集成Netty服务配置加载的方法是什么
    这篇文章主要讲解了“Gateway集成Netty服务配置加载的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Gateway集成Netty服务配置加载的方法是什么”吧!一、Netty...
    99+
    2023-07-05
  • spring cloud gateway集成hystrix的方法
    本篇内容介绍了“spring cloud gateway集成hystrix的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring ...
    99+
    2023-06-20
  • springboot集成springCloud中gateway时启动报错的解决
    在项目中引入springcloud中的gateway时报以下错误 Description: Parameter 0 of method modifyRequestBodyGatew...
    99+
    2024-04-02
  • SpringCloud Gateway服务网关的部署与使用的方法是什么
    这篇文章主要介绍“SpringCloud Gateway服务网关的部署与使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Gateway服务网...
    99+
    2023-07-05
  • SpringCloud gateway request的body验证或修改方式是什么
    这篇文章主要介绍“SpringCloud gateway request的body验证或修改方式是什么”,在日常操作中,相信很多人在SpringCloud gateway request的body验证或修改方式是什么问题上存在疑惑,小编查阅...
    99+
    2023-06-20
  • SpringCloud中Gateway实现鉴权的方法
    目录一、JWT 实现微服务鉴权1 什么是微服务鉴权2.代码实现一、JWT 实现微服务鉴权 JWT一般用于实现单点登录。单点登录:如腾讯下的游戏有很多,包括lol,飞车等,在qq游戏对...
    99+
    2024-04-02
  • delphi集成python的方法是什么
    在Delphi中集成Python可以通过以下几种方法实现:1. 使用Python4Delphi(P4D):- Python4Delp...
    99+
    2023-09-28
    delphi python
  • springboot集成teams的方法是什么
    本篇内容主要讲解“springboot集成teams的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot集成teams的方法是什么”吧!添加依赖<dependen...
    99+
    2023-06-28
  • SpringBoot集成tomcat的方法是什么
    这篇文章主要介绍“SpringBoot集成tomcat的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot集成tomcat的方法是什么”文章能帮助大家解决问题。spring...
    99+
    2023-07-05
  • springboot集成ffmpeg的方法是什么
    要在Spring Boot中集成FFmpeg,你可以使用Java-FFmpeg库来实现。下面是一些集成FFmpeg的步骤: 添加J...
    99+
    2023-10-23
    springboot ffmpeg
  • spring集成kafka的方法是什么
    Spring集成Kafka的方法如下: 引入依赖:在项目的pom.xml文件中添加spring-kafka依赖。 <dep...
    99+
    2023-10-20
    spring kafka
  • Springboot集成lombok.jar的方法是什么
    本文小编为大家详细介绍“Springboot集成lombok.jar的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot集成lombok.jar的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-06
  • springboot集成hadoop的方法是什么
    Spring Boot集成Hadoop的方法是通过在Spring Boot应用程序中使用HDFS客户端来访问和操作Hadoop集群。...
    99+
    2024-03-14
    hadoop springboot
  • springboot集成mybatis的方法是什么
    要在Spring Boot中集成MyBatis,可以按照以下步骤进行操作: 添加MyBatis和MyBatis-Spring的依赖...
    99+
    2024-03-07
    springboot mybatis
  • Quartz与Spring集成的方法是什么
    要将Quartz与Spring集成,可以按照以下步骤进行操作:1. 添加Quartz和Spring的依赖:在项目的pom.xml文件...
    99+
    2023-10-20
    Quartz Spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作