国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔

這篇具有很好參考價值的文章主要介紹了Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 作者主頁: 有來技術
?? 開源項目: youlai-mall ?? vue3-element-admin ?? youlai-boot
?? 倉庫主頁: Gitee ?? Github ?? GitCode
?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請糾正!

開局一張圖

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

前言

youlai-mall 開源微服務商城新版本基于 Spring Boot 3 和 Java 17,同時采用 Knife4j 4.3。與以前版本不同的是,新版本的 Knife4j 不再依賴 Springfox 框架(該框架于2020年停止更新)作為基礎的 OpenAPI3 規(guī)范,而選擇了 SpringDoc 作為底層依賴框架的 OpenAPI3 規(guī)范的實現(xiàn)。因此,相對于以前的版本,新版本存在較大的差異。

在新版本中,您可以參考 Knife4j 官網(wǎng) 進行適配和升級。本文將介紹新版本中 Knife4j 4.3 和微服務的整合、 Spring Cloud Gateway 網(wǎng)關聚合,以及如何自動填充 Spring Authorization Server 的自定義擴展的 OAuth2 密碼模式的 access_token。

Spring Cloud 整合 Knife4j

這里的 Spring Cloud 微服務是除了網(wǎng)關(youlai-gateway)之外的其他服務,像系統(tǒng)服務(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.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'default'
      paths-to-match: '/**'
      packages-to-scan: 
      	# 配置接口文檔掃描包路徑,每個服務的路徑不同,下面是系統(tǒng)服務(youlai-system)的包路徑
        - com.youlai.system.controller
      
# knife4j的增強配置,不需要增強可以不配
knife4j:
  enable: false
  setting:
    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 規(guī)范 + SpringDoc 實現(xiàn) + knife4j 增強
 *
 * @author haoxr
 * @since 3.0.0
 */
@Configuration
public class SwaggerConfig {

    /**
     * OAuth2 認證 endpoint
     */
    @Value("${spring.security.oauth2.authorizationserver.token-uri}")
    private String tokenUrl;

    /**
     * OpenAPI 配置(元信息、安全協(xié)議)
     */
    @Bean
    public 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 參數(shù)
                .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))
                // 接口信息定義
                .info(new Info()
                        .title("系統(tǒng)服務")
                        .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即可查看文檔

系統(tǒng)服務 (youlai-system) 的接口文檔地址 http://localhost:8800/doc.html ,訪問頁面如下:

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

Spring Cloud Gateway 網(wǎng)關聚合

參考 Knife4j 官方文檔:Spring Cloud Gateway 網(wǎng)關聚合

Knife4j 官方提供 手動配置服務發(fā)現(xiàn) 兩種聚合方式,如果微服務數(shù)量少且有定制化文檔需求建議 手動配置,否則一般還是推薦服務發(fā)現(xiàn)的方式,可以避免每次新增一個服務還得手動去添加配置的煩惱。

這里使用的是 服務發(fā)現(xiàn) 聚合方式,如果手動請參考官方配置(很詳細)

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:
          # 啟用服務發(fā)現(xiàn)
          enabled: true
          lower-case-service-id: true
      # 網(wǎng)關路由
      routes:
        - id: 系統(tǒng)服務
          uri: lb://youlai-system
          predicates:
            - Path=/youlai-system/**
          filters:
            - StripPrefix=1 

# knife4j 網(wǎng)關聚合
knife4j:
  gateway:
    enabled: true
    # 指定服務發(fā)現(xiàn)的模式聚合微服務文檔,并且是默認 default 分組
    strategy: discover
    discover:
      # OpenAPI 3.0 規(guī)范 
      version: openapi3
      enabled: true

訪問網(wǎng)關聚合接口文檔

訪問 Knife4j 的文檔地址:http://ip:port/doc.html即可查看文檔

網(wǎng)關(youlai-gateway) 的接口文檔地址 http://localhost:9999/doc.html ,訪問頁面如下圖:

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

接口測試

接下來做一個 OAuth2 登錄認證(Spring Authorization Server 擴展的 OAuth2 密碼模式),認證成功拿到訪問令牌(access_token) 去請求獲取登錄用戶信息接口測試 。

認證成功之后,再去打開其他接口會請求頭會自動攜帶訪問令牌。

登錄認證

點擊接口文檔左側(cè)菜單欄 Authorize 打開認證頁面,填寫圖示 OAuth2 密碼模式授權認證參數(shù)

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

?? 特別提醒: Knife4j 自動填充請求頭前提需要數(shù)據(jù)原生返回,那么什么是原生數(shù)據(jù)格式?

  • ??原生數(shù)據(jù)格式

    {
        "access_token": "eyJraWQiOiJlNTg1NTQ3MS02ZDlmLTRkOWEtODJlNi1mN2QyNjY4YjhhZDgiLCJhbGciOiJSUzI1NiJ9.xxx.xxx",
        "refresh_token": "oYQz7UA4jafCfYZN7BW1cX6Kn-QGxNf1XIxKp-xxx",
        "token_type": "Bearer",
        "expires_in": 86400
    }
    
  • ?包裝數(shù)據(jù)格式

    自定義數(shù)據(jù)格式,像包含了業(yè)務碼的,這種 Knife4j 是無法解析的,更沒法去自動填充了。

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

client 是代碼中為測試接口預留的一個客戶端ID,具體可以看下 MyAuthenticationSuccessHandler 這個類的處理

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

獲取用戶信息

認證成功之后,打開 獲取登錄用戶信息 接口 ,點擊請求頭部可以看到訪問令牌已經(jīng)自動填充到請求頭的 Authorization 參數(shù)中了。
Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

點擊發(fā)送,可以看到數(shù)據(jù)成功返回。

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

輸入錯誤的訪問令牌,提示 “token無效或已過期”,符合預期效果。

Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔,# Knife4j,# youlai-mall,微服務,架構,云原生,gateway,spring cloud

結(jié)語

這篇文章首先介紹了如何將 Spring Cloud 微服務與 Knife4j 4.3 集成,借助 Spring Cloud Gateway 網(wǎng)關聚合各個服務的接口文檔,實現(xiàn)了更統(tǒng)一的管理方式。最后,我們還探討了如何在整合后的接口文檔中測試 Spring Authorization Server 擴展的 OAuth2 密碼模式認證接口,一旦認證成功,Knife4j 會自動填充訪問令牌,使您能夠輕松地訪問其他接口。

到此,youlai-mall 新版本接口文檔的整合和調(diào)試教程結(jié)束。希望這篇文章對您有所幫助,能夠幫助您避免在使用新版本時遇到各種問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-716497.html

源碼

Github Gitee
開源組織 有來開源組織 有來開源組織
后端 youlai-mall ?? youlai-mall ??
前端 mall-admin?? mall-admin ??
移動端 mall-app ?? mall-app ??

到了這里,關于Spring Cloud Gateway + Knife4j 4.3 實現(xiàn)微服務網(wǎng)關聚合接口文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring Boot3整合knife4j(swagger3)

    Spring Boot3整合knife4j(swagger3)

    目錄 1.前置條件 2.導依賴 3.配置 已經(jīng)初始化好一個spring boot項目且版本為3X,項目可正常啟動。 作者版本為3.2.2 初始化教程: 新版idea創(chuàng)建spring boot項目-CSDN博客 https://blog.csdn.net/qq_62262918/article/details/135785412?spm=1001.2014.3001.5501 knife4j官網(wǎng): Knife4j · 集Swagger2及OpenAPI3為一體的增強

    2024年01月23日
    瀏覽(30)
  • Spring Boot 2.6 以上整合 Swagger + Knife4j 報錯

    Spring Boot 2.6 以上整合 Swagger + Knife4j 報錯

    這個問題主要出現(xiàn)在 Spring Boot 2.6 及以后,只要是 Spring Boot 2.6 引入的新 PathPatternParser 導致的。 兩種解決辦法 Path匹配策略切換回 ??ant_path_matcher ? 添加下面這個Bean的定義

    2024年01月17日
    瀏覽(38)
  • knife4j實現(xiàn)微服務swagger文檔聚合

    knife4j實現(xiàn)微服務swagger文檔聚合

    在項目開發(fā)過程中,接口文檔的使用是在所難免的,但是在微服務場景下,多個服務之間的swagger是分散的,雖然swagger提供了微服務的聚合方式,配置過于繁瑣,加之swagger本身的功能比較少,而且ui布局也比較蛋痛,此處推薦一款新框架用于增強swagger以及實現(xiàn)微服務接口文檔的聚合 kni

    2024年02月13日
    瀏覽(18)
  • Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Swagger 作為 API 設計和文檔的強大工具,是一個由專門的工具集合支持的框架,它在整個 API 的生命周期中發(fā)揮作用,從設計和文檔,到測試和部署。通過提供可視化界面,Swagger 讓開發(fā)人員和最終用戶都能清晰地理解和操作 API。 使用建議:筆者建議優(yōu)先考慮 Knife4J,它已經(jīng)能

    2024年01月22日
    瀏覽(22)
  • 【swagger】spring security中 swagger和knife4j集成 無法訪問 返回結(jié)果沒有內(nèi)容

    【swagger】spring security中 swagger和knife4j集成 無法訪問 返回結(jié)果沒有內(nèi)容

    作為一個強迫癥重度的程序猿 不想多導一個jar包 本文創(chuàng)作背景是鑒于網(wǎng)上大多數(shù)是舊版本swagger2的教程,且沒有針對2和3區(qū)別描述,話不多說 直接步入正題。 如果只需要knife4j文檔 導這 一個包 就夠了 這里以3.0+版本舉例 (對springboot比較熟悉的同學應該清楚 starter目的就是將其

    2024年02月06日
    瀏覽(20)
  • Knife4j框架介紹

    Knife4j框架介紹

    Knife4j是一款基于Swagger 2的在線API文檔框架,是日常開發(fā)中很常用的框架,基于此框架,后端可以和前端開發(fā)人員進行高效溝通。 使用Knife4j框架只需要以下三步: 1:添加Knife4j的依賴 (當前建議使用的Knife4j版本,只適用于Spring Boot 2.6以下版本,不含Spring Boot 2.6) 2:在主配置

    2024年02月13日
    瀏覽(18)
  • knife4j接口文檔

    knife4j接口文檔

    knife4j是為Java MVC框架集成Swagger生成Api文檔的增強解決方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一樣小巧,輕量,并且功能強悍!其底層是對Springfox的封裝,使用方式也和Springfox一致,只是對接口文檔UI進行了優(yōu)化。 核心功能 : 文檔說明 :根據(jù)Swagger的規(guī)范說明

    2023年04月08日
    瀏覽(19)
  • SpringBoot 整合knife4j

    SpringBoot 整合knife4j

    Knife4j是一款基于Swagger 2的在線API文檔框架 添加依賴 創(chuàng)建 Swagger 配置依賴 application.yml配置文件 響應參數(shù) tips: http://127.0.0.1:8080/doc.html 這里端口,就是你運行項目的端口 springboot 中 knife4j的完整參數(shù)如下: 接口添加作者 添加作者有倆種方式 在方法上使用注解 @ApiOperationSupport

    2024年02月14日
    瀏覽(23)
  • SpringBoot整合Knife4j

    SpringBoot整合Knife4j

    ?作者簡介:大家好,我是Leo,熱愛Java后端開發(fā)者,一個想要與大家共同進步的男人??????個人主頁:Leo的博客??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內(nèi)容:SpringBoot整合Knife4j ??個人知識庫: Leo知識庫,歡迎大家訪問

    2024年04月11日
    瀏覽(28)
  • Knife4j文檔請求異常(更新)

    Knife4j文檔請求異常(更新)

    在SpringBoot項目中,如果是分不同的模塊開發(fā)。 注解配置 @EnableSwagger2WebMvc 不在啟動類上,而是加到了其他模塊的注解中,可能會導致這種情況發(fā)生。 我的是common一個單獨的模塊,在common模塊中配置了WebMvcConfig。 然后在WebMvcConfig類上面加了注解 @EnableSwagger2WebMvc . 那么,解決方

    2024年01月18日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包