SpringBoot结合Knife4j进行API分组授权管理配置详解

在现代的微服务架构中,API 文档和授权管理是不可或缺的一部分,本文将介绍如何在 Spring Boot 应用中集成 Knife4j,并进行 API 分组和授权管理配置,感兴趣的小伙伴可以了解下

目录
  • 环境准备
  • 配置 Swagger
  • 配置 Swagger OpenAPI
  • 自定义 Swagger UI 底部版权信息
  • 启动应用

在现代的微服务架构中,API 文档和授权管理是不可或缺的一部分。Knife4j 是一个基于 Swagger 的增强解决方案,它提供了更丰富的功能和更好的用户体验。本文将介绍如何在 Spring Boot 应用中集成 Knife4j,并进行 API 分组和授权管理配置。

环境准备

首先,确保你的项目中已经添加了 Knife4j 的依赖:

    com.github.xiaoymin
    knife4j-openapi3-jakarta-spring-boot-starter
    4.5.0

配置 Swagger

application.yml 文件中,你可以配置 Swagger 的相关属性,包括 API 文档的路径、分组配置以及Knife4j的特定设置:

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: order
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: '通用模块'
      paths-to-match: '/**'
      packages-to-scan: com.example.springboot.common.controller
    - group: '系统模块'
      paths-to-match: '/**'
      packages-to-scan: com.example.springboot.system.controller
    - group: '用户模块'
      paths-to-match: '/**'
      packages-to-scan: com.example.springboot.user.controller

knife4j:
  enable: true
  setting:
    language: zh_cn
    enable-footer-custom: true
    footer-custom-content: "Apache License 2.0 | Copyright xiao he like sleep"
  basic:
    enable: true
    username: username
    password: password

配置 Swagger OpenAPI

在 Spring Boot 应用中,你需要定义一个配置类来配置 OpenAPI 的信息:

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("API管理系统")
                        .contact(new Contact().name("xiaohelikesleep").email("2109664977@qq.com"))
                        .description("API管理系统文档")
                        .version("v1.0")
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")))
                .externalDocs(new ExternalDocumentation()
                        .description("外部文档")
                        .url("https://springshop.wiki.github.org/docs"))
                .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))
                .components(new Components().addSecuritySchemes(
                        HttpHeaders.AUTHORIZATION,
                        new SecurityScheme()
                                .name(HttpHeaders.AUTHORIZATION)
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("Bearer")
                                .in(SecurityScheme.In.HEADER)
                                .bearerFormat("JWT")
                ));
    }
}

自定义 Swagger UI 底部版权信息

通过 knife4j.setting.enable-footer-custom 属性,你可以自定义 Swagger UI 底部的版权信息:

knife4j:
  enable: true
  setting:
    language: zh_cn
    enable-footer-custom: true
    footer-custom-content: "Apache License 2.0 | Copyright xiao he like sleep"
  basic:
    enable: true
    username: 1
    password: 1

启动应用

main 方法中,你可以记录应用启动的信息,包括应用名称、本地 URL 和文档 URL:

public static void main(String[] args) {
    ConfigurableEnvironment env = SpringApplication.run(ApiApplication.class, args).getEnvironment();
    String applicationName = env.getProperty("spring.application.name");
    String serverPort = env.getProperty("server.port");
    String serverIp = env.getProperty("ip");

    log.info(
            "----------------------------------------------------------%n" +
            "Application: '%s' is running Success!%n" +
            "Local URL:    http://{}:{}%n" +
            "Document:     http://{}:{}/doc.html%n" +
            "----------------------------------------------------------",
            applicationName, serverIp, serverPort, serverIp, serverPort);
}

运行效果:

Swagger界面:

配置的另一种写法

package com.example.order.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Knife4jConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI().info(new Info()
                .title("订单服务接口文档")
                .version("1.0")
                .description("订单服务相关接口"));
    }

    @Bean
    public GroupedOpenApi orderApi() {
        return GroupedOpenApi.builder()
                .group("订单服务")
                .pathsToMatch("/order/**")
                .packagesToScan("com.example.order.controller")
                .build();
    }
}

到此这篇关于SpringBoot结合Knife4j进行API分组授权管理配置详解的文章就介绍到这了,更多相关SpringBoot Knife4j进行API分组管理内容请搜索骃骐网以前的文章或继续浏览下面的相关文章希望大家以后多多支持骃骐网!

您可能感兴趣的文章:

  • SpringBoot 使用 OpenAPI3 规范整合 knife4j的详细过程
  • SpringBoot Knife4j在线API文档框架基本使用
  • Springboot集成knife4j实现风格化API文档
  • SpringBoot中使用Knife4j生成接口文档的示例详解
  • Springboot3集成Knife4j的步骤以及使用(最完整版)
  • SpringBoot与knife4j的整合使用过程
  • springboot整合knife4j全过程
  • knife4j 整合 springboot的过程详解

相关推荐:

如何按字符串首字母对 Pandas Series 进行分组

本文讲解如何正确使用 itertools.groupby 按字符串首字母对 pandas series 数据进行分组,重点解决未排序导致分组断裂、键对象不可读等问题,并提供更简洁、健壮的替代方案。 本文讲解如何正确使用 itertools.groupby 按字符串首字母对 pandas series 数据进行分组,重点解决未排序导致分组断裂、键对象不可读等问题,并提供更简洁、健壮的替代方案。 it...

Pandas 中按列分组统计满足条件的唯一值数量并筛选结果

本文介绍如何在 Pandas 中基于多条件过滤(如 colC > 0 且 colB 属于指定集合),按 colA 分组统计 colB 的唯一值个数,并仅保留计数大于 2 的分组,最终导出对应原始数据子集。 本文介绍如何在 pandas 中基于多条件过滤(如 `colc > 0` 且 `colb` 属于指定集合),按 `cola` 分组统计 `colb` 的唯一值个数,并仅保留计数大于 ...

如何按字符串首字母对数据进行分组

本文详解如何正确使用 Python 的 itertools.groupby 按字符串首字母分组,强调必须先排序再分组,并提供简洁、可读、无冗余的实现方案。 本文详解如何正确使用 python 的 `itertools.groupby` 按字符串首字母分组,强调**必须先排序再分组**,并提供简洁、可读、无冗余的实现方案。 itertools.groupby 是一个高效但易被误用的工具:它仅对连续相...

如何在分组后计算滚动排名(以15分钟周期内近10期成交量排名为例)

本文介绍如何对高频股票OHLCV数据按时间分组(如每日同一时刻),并为每组计算最近10个同时间点的成交量滚动排名,解决groupby与rolling协同使用的常见误区。 本文介绍如何对高频股票ohlcv数据按时间分组(如每日同一时刻),并为每组计算最近10个同时间点的成交量滚动排名,解决`groupby`与`rolling`协同使用的常见误区。 在处理15分钟级股票行情数据时,常需分析“同一交易时...

Python数据标准化用哪个方案好_StandardScaler与MinMaxScaler详解

StandardScaler不适用于明显偏态或含大量异常值的数据,因其依赖的均值和标准差易被离群点污染,导致正常数据被压缩到极窄范围,影响模型性能;必须训练集fit_transform、测试集transform,避免数据泄露。 StandardScaler 什么时候不能用 当你的数据明显偏离正态分布,或者存在大量异常值时,StandardScaler 的效果会变差。它依赖均值和标准差,而这两个统计...

如何使用布尔Series筛选groupby对象中的分组

本文介绍在pandas中,当需要基于一个dataframe的条件筛选结果(布尔series)来过滤另一个具有重复键的dataframe的groupby分组时,正确的实现方法:先用isin()定位目标键值,再对目标dataframe预过滤,最后执行groupby。 本文介绍在pandas中,当需要基于一个dataframe的条件筛选结果(布尔series)来过滤另一个具有重复键的dataframe的...

如何基于布尔索引筛选分组后的 DataFrame

本文介绍如何利用主表中生成的布尔 Series,精准筛选另一张含重复键的表中对应分组的数据,核心是通过 isin() 关联键值而非直接索引对齐,避免因行数不等导致的索引错位问题。 本文介绍如何利用主表中生成的布尔 series,精准筛选另一张含重复键的表中对应分组的数据,核心是通过 `isin()` 关联键值而非直接索引对齐,避免因行数不等导致的索引错位问题。 在 Pandas 数据分析中,常遇到...

怎么理解CSS浮动_CSS浮动原理与清除浮动方法详解教程

浮动通过脱离文档流实现元素左/右对齐,导致父元素高度塌陷;常用清除方法包括clear属性、overflow设置和伪元素clearfix;现代布局中,float仍适用于文本环绕图片等简单场景,而复杂布局推荐使用Flexbox或Grid。 CSS浮动,说白了,就是让一个元素脱离常规的文档流,像浮在水面上一样,沿着其父容器的左侧或右侧移动,直到遇到父容器的边缘或者另一个浮动元素。它最早是为了实现文本环绕...

实现带平滑过渡效果的悬停Logo图片:CSS技巧详解

本教程详细介绍了如何利用CSS的绝对定位和不透明度属性,为网页头部(header)的Logo图片实现平滑的悬停切换效果。通过将两张图片叠加并控制其中一张的透明度与过渡时间,我们能够创建出专业的视觉交互,避免生硬的图片替换,提升用户体验。问题分析 在网页设计中,为logo或其他交互元素添加悬停效果是提升用户体验的常见做法。当需要在鼠标悬停时将一个logo图片替换为另一个logo图片,并且希望这个替换...

Golang数据类型详解 基本类型与零值

Golang基本类型包括整型、浮点型、布尔型、字符串型和复数类型,各自零值为0、0.0、false、""、(0+0i),理解零值可避免未初始化错误、确保条件判断正确及数据结构安全初始化。 Golang的数据类型可以分为基本类型和复合类型。基本类型包括整型、浮点型、布尔型和字符串型,每种类型都有其默认的零值。了解这些零值对于编写健壮的Golang程序至关重要。 Golang数据类型详解:基本类型与零...