Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档

目录

    • 前言
    • Spring Cloud 整合 Knife4j
      • pom.xml
      • application.yml
      • SwaggerConfig.java
      • 访问单服务接口文档
    • Spring Cloud Gateway 网关聚合
      • pom.xml
      • application.yml
      • 访问网关聚合接口文档
    • 接口测试
      • 登录认证
      • 获取登录用户信息
    • 结语
    • 源码

前言

youlai-mall 开源微服务商城新版本基于 Spring Boot 3 和 Java 17,同时采用 Knife4j 4.3。与以前版本不同的是,新版本的 Knife4j 不再依赖 Springfox 框架(该框架于2020年停止更新)作为基础的 OpenAPI3 规范,而选择了 SpringDoc 作为底层依赖框架的 OpenAPI3 规范的实现。因此,相对于以前的版本,新版本存在较大的差异。

在新版本中,您可以参考 Knife4j 官网 进行适配和升级。本文将介绍新版本中 Knife4j 4.3 和微服务的整合、 Spring Cloud Gateway 网关聚合,以及如何自动填充 Spring Authorization Server 的自定义扩展的 OAuth2 密码模式的 access_token。

Spring Cloud 整合 Knife4j

这里的 Spring Cloud 微服务是除了网关(youlai-gateway)之外的其他服务,像系统服务(youlai-system)和商城服务(mall-*)

pom.xml

添加 knife4j 的 maven 依赖,参考 Spring Boot 3 整合 Knife4j

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version>
</dependency>

application.yml

除了 packages-to-scan 扫描接口包路径,其他默认即可,参考 Spring Boot 3 整合 Knife4j

spring:security:oauth2:authorizationserver:# OAuth2 认证路径token-uri: http://localhost:9999/youlai-auth/oauth2/token# springdoc-openapi 项目配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: # 配置接口文档扫描包路径,每个服务的路径不同,下面是系统服务(youlai-system)的包路径- com.youlai.system.controller# knife4j的增强配置,不需要增强可以不配
knife4j:enable: falsesetting:language: zh_cn

SwaggerConfig.java

package com.youlai.system.config;import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;/*** Swagger 配置类* <p>* 基于 OpenAPI 3.0 规范 + SpringDoc 实现 + knife4j 增强** @author haoxr* @since 3.0.0*/
@Configuration
public class SwaggerConfig {/*** OAuth2 认证 endpoint*/@Value("${spring.security.oauth2.authorizationserver.token-uri}")private String tokenUrl;/*** OpenAPI 配置(元信息、安全协议)*/@Beanpublic OpenAPI apiInfo() {return new OpenAPI().components(new Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION,new SecurityScheme()// OAuth2 授权模式.type(SecurityScheme.Type.OAUTH2).name(HttpHeaders.AUTHORIZATION).flows(new OAuthFlows().password(new OAuthFlow().tokenUrl(tokenUrl).refreshUrl(tokenUrl)))// 安全模式使用Bearer令牌(即JWT).in(SecurityScheme.In.HEADER).scheme("Bearer").bearerFormat("JWT")))// 接口全局添加 Authorization 参数.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))// 接口信息定义.info(new Info().title("系统服务").version("3.0.0").description("用户、角色、菜单、部门、字典等接口").license(new License().name("Apache 2.0").url("https://www.apache.org/licenses/LICENSE-2.0")));}}

访问单服务接口文档

访问 Knife4j 的文档地址:http://ip:port/doc.html即可查看文档

系统服务 (youlai-system) 的接口文档地址 http://localhost:8800/doc.html ,访问页面如下:

Spring Cloud Gateway 网关聚合

参考 Knife4j 官方文档:Spring Cloud Gateway 网关聚合

Knife4j 官方提供 手动配置服务发现 两种聚合方式,如果微服务数量少且有定制化文档需求建议 手动配置,否则一般还是推荐服务发现的方式,可以避免每次新增一个服务还得手动去添加配置的烦恼。

这里使用的是 服务发现 聚合方式,如果手动请参考官方配置(很详细)

pom.xml

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.3.0</version>
</dependency>

application.yml

spring:cloud:gateway:discovery:locator:# 启用服务发现enabled: truelower-case-service-id: true# 网关路由routes:- id: 系统服务uri: lb://youlai-systempredicates:- Path=/youlai-system/**filters:- StripPrefix=1 # knife4j 网关聚合
knife4j:gateway:enabled: true# 指定服务发现的模式聚合微服务文档,并且是默认 default 分组strategy: discoverdiscover:# OpenAPI 3.0 规范 version: openapi3enabled: true

访问网关聚合接口文档

访问 Knife4j 的文档地址:http://ip:port/doc.html即可查看文档

网关(youlai-gateway) 的接口文档地址 http://localhost:9999/doc.html ,访问页面如下图:

接口测试

接下来做一个 OAuth2 登录认证(Spring Authorization Server 扩展的 OAuth2 密码模式),认证成功拿到访问令牌(access_token) 去请求获取登录用户信息接口测试 。

认证成功之后,再去打开其他接口会请求头会自动携带访问令牌。

登录认证

点击接口文档左侧菜单栏 Authorize 打开认证页面,填写图示 OAuth2 密码模式授权认证参数

image-20231027164838095

💡 特别提醒: Knife4j 自动填充请求头前提需要数据原生返回,那么什么是原生数据格式?

  • ✔️原生数据格式

    {"access_token": "eyJraWQiOiJlNTg1NTQ3MS02ZDlmLTRkOWEtODJlNi1mN2QyNjY4YjhhZDgiLCJhbGciOiJSUzI1NiJ9.xxx.xxx","refresh_token": "oYQz7UA4jafCfYZN7BW1cX6Kn-QGxNf1XIxKp-xxx","token_type": "Bearer","expires_in": 86400
    }
    
  • ❌包装数据格式

    自定义数据格式,像包含了业务码的,这种 Knife4j 是无法解析的,更没法去自动填充了。

    {"code": "00000","data": {"access_token": "eyJraWQiOiJlNTg1NTQ3MS02ZDlmLTRkOWEtODJlNi1mN2QyNjY4YjhhZDgiLCJhbGciOiJSUzI1NiJ9.xxx.xxx","refresh_token": "ImW57MWPEBQpcNpuPsX1l5eJCDtyoBMz-xxx","token_type": "Bearer","expires_in": 86400},"msg": "一切ok"
    }
    

client 是代码中为测试接口预留的一个客户端ID,具体可以看下 MyAuthenticationSuccessHandler 这个类的处理

获取登录用户信息

认证成功之后,打开 获取登录用户信息 接口 ,点击请求头部可以看到访问令牌已经自动填充到请求头的 Authorization 参数中了。

点击发送,可以看到数据成功返回。

输入错误的访问令牌,提示 “token无效或已过期”,符合预期效果。

结语

这篇文章首先介绍了如何将 Spring Cloud 微服务与 Knife4j 4.3 集成,借助 Spring Cloud Gateway 网关聚合各个服务的接口文档,实现了更统一的管理方式。最后,我们还探讨了如何在整合后的接口文档中测试 Spring Authorization Server 扩展的 OAuth2 密码模式认证接口,一旦认证成功,Knife4j 会自动填充访问令牌,使您能够轻松地访问其他接口。

到此,youlai-mall 新版本接口文档的整合和调试教程结束。希望这篇文章对您有所帮助,能够帮助您避免在使用新版本时遇到各种问题。

源码

GithubGitee
开源组织有来开源组织有来开源组织
后端youlai-mall 📖youlai-mall 📖
前端mall-admin🌎mall-admin 🌎
移动端mall-app 🌎mall-app 🌎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/176861.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

右击文件或者文件夹使用vscode打开

平常我们在打开项目时&#xff0c;经常会需要快捷打开方式&#xff0c;直接使右键使用编辑器打开&#xff0c;但是有时在安装时忘记了选择 “Add “Open with Code” action to Windows Explorer file context menu” 在Windows资源管理器文件上下文菜单中添加“用代码打开”操…

ubuntu PX4 vscode stlink debug设置

硬件 stlink holybro debug板 pixhawk4 安装openocd 官方文档&#xff0c;但是第一步安装建议从源码安装&#xff0c;bug少很多 github链接 编译安装&#xff0c;参考 ./bootstrap (when building from the git repository)./configure [options]makesudo make install安装后…

服务器带宽忽然暴增,不停的触发告警

问题&#xff1a; 线上环境&#xff0c;服务器的外网下行带宽达到某个阈值&#xff0c;触发告警&#xff0c;查了下服务器的带宽监控信息&#xff0c;是从某个时间开始突然串上去的&#xff0c;然后监控图形非常有规律&#xff0c;都是每秒达到顶峰后&#xff0c;又立马下去了…

IDEA初步入门

1 安装 现在的系统更迭很快&#xff0c;很多软件都只支持win10 和 11了&#xff0c;但我们过时党还在用win7. 所以就必须找到合适的版本。在windows 7 64位系统下&#xff0c;可以使用IDEA 2020.1.4版本。 在Jetbrain官方下&#xff0c;找到历史版本&#xff0c;找到windows版…

php收发邮件的多种方法?

1、添加扩展&#xff1a; # 第一种&#xff1a; composer require php-imap/php-imap # 第二种&#xff1a; composer require phpmailer/phpmailer2、这里采用第二种方式&#xff1a; <?php declare(strict_types1);namespace App\Controller\v1\email;use App\Controll…

怎样利用 AI 大模型,辅助研发管理与效能提升?

AI 大模型已经逐渐渗透到各行各业的应用场景中&#xff0c;在软件研发领域也不例外。在软件研发领域&#xff0c;从需求分析到软件设计&#xff0c;从软件开发到测试&#xff0c;以及最后发布上线&#xff0c;AI 在各个环节都发挥着重要作用。10 月 21 日&#xff0c;思码逸首席…

计算机从内存中读取数组元素

在计算机中&#xff0c;我们可以把内存看成是一些排列好的格子&#xff0c;每个格子对应一个内存地址&#xff0c;那么数据会分散的存储在不同的格子中&#xff1a; 对于数组&#xff0c;计算机会在内存中为其申请一段连续的空间&#xff0c;并且会记下索引为0处的内存地址&…

图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】

目录 一、前言二、统计区域度量2.1&#xff1a;图像矩特征2.1.1&#xff1a;原始矩/几何矩2.1.2&#xff1a;中心距2.1.3&#xff1a;归一化的中心矩2.1.4&#xff1a;不变矩——Hu矩2.1.5&#xff1a;OpenCv实现矩特征及其应用 2.2&#xff1a;点度量特征2.3&#xff1a;全局直…

Jmeter之JSR223

一、JSR223组件 JSR是Java Specification Requests的缩写,意思是Java规范提案。JSR已成为Java界的一个重要标准. JSR223其实包含了有好几种组件,但是其用法都是一致的,并且都是执行一段代码&#xff0c;主要分类如下&#xff1a; JSR223 PreProcessor JSR223 Timer JSR223 S…

【二叉树经典题目】

根据二叉树创建字符串 本题的关键在于什么情况要省略括号&#xff0c;什么情况不能省略&#xff1a; 左右为空可以省略括号 左不为空&#xff0c;右为空可以省略括号左为空,右不为空不能省略括号 class Solution { public://1.左右为空可以省略括号//2.左不为空&#xff0c;右…

初识HTML超文本标记语言

文章目录 前端简介引入前端三剑客什么是HTML&#xff1f;超文本传输协议前戏HTTP超文本传输协议1.什么是HTTP协议2.四大特性3.数据格式4.响应状态码 基于HTTP协议搭建HTMLHTML简介HTML文档结构head常见标签1.meta 定义网页源信息(很多配置)2.style内部支持编写CSS代码3.link引入…

SpringCloud(二) Eureka注册中心的使用

在SpringCloud(一)中,我们学会了使用RestTemplate进行远程调用,但是在调用user-service时候需要在order-service中发送http请求,请求中需要书写对应微服务的ip和端口号,十分不方便,如果此时有多个user-service实例的话,就不知道调用哪个了(除非每次调用的时候都对ip和端口号进行…

论文-分布式-并发控制-并发控制问题的解决方案

目录 参考文献 问题 解法与证明 易读版本 参考文献 Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control&#xff0c;引出并发系统下的互斥(mutual exclusion)问题&#xff0c;自此开辟了分布式计算领域Dijkstra在文中给出了基于共享存储原子…

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…

易点天下受邀参与云栖大会,以AIGC重塑出海营销新范式

10月31日&#xff0c;2023云栖大会在杭州云栖小镇拉开帷幕。与往年不同&#xff0c;今年的云栖大会以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;与国际潮流科技大会组织方式接轨&#xff0c;通过云计算、人工智能、产业创新三大主题馆40000平科技展&#xff0c…

redis缓存穿透

redis缓存穿透 模拟一个缓存穿透的环境&#xff1a; redis缓存穿透1. 准备一个GET请求并且在第一次访问的时候将数据写入缓存2. 再次访问的时候首先判断缓存是否命中3. 命中了直接返回&#xff0c;未命中重建缓存1. 缓存空对象2. 布隆过滤器 1. 准备一个GET请求并且在第一次访问…

avi怎么转mp4?

avi怎么转mp4&#xff1f;如今市面上涌现了各种多样的视频格式&#xff0c;其中AVI作为一种音频视频交错格式&#xff0c;虽然使用较少但相对常见。它的优点在于占用空间较小&#xff0c;但画面质量并不是很出色。然而&#xff0c;AVI格式也存在一个明显的缺点&#xff0c;即兼…

柯桥专升本学校,自考本科文凭的价值如何?

自考本科文凭的价值如何&#xff1f; 自考本科学历是通过独立学习和考试获得的一种本科学历。对于自考本科学历的价值&#xff0c;很多人感到困惑&#xff0c;那么究竟自考本科学历有多大的价值呢? 首先&#xff0c;在就业市场上&#xff0c;自考本科学历具有一定的竞争力。随…

VBA技术资料MF77:组合所选范围中的所有形状

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…