SpringBoot集成swagger2配置权限认证参数

news2024/11/16 16:50:30
作者简介:大家好,我是撸代码的羊驼,前阿里巴巴架构师,现某互联网公司CTO

联系v:sulny_ann(17362204968),加我进群,大家一起学习,一起进步,一起对抗互联网寒冬


在使用swagger2时,如果api接口需要token等权限认证内容,那么此时可以有两种方案进行解决:方案一,每个请求上面都添加对应token的key和value值。方案二:全局统一添加权限认证的token。

一般情况下token都存放在header中。


引入swagger2依赖

引入对应的swagger2依赖:

<dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger2</artifactId>    <version>2.9.2</version></dependency><dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger-ui</artifactId>    <version>2.9.2</version></dependency>


集成配置方案一

首先我们来看第一种方案,也就是每个请求都添加对应header信息,对应的config文件配置如下:​​​​​​​

import com.google.common.collect.Lists;import io.swagger.annotations.ApiOperation;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.ParameterBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.schema.ModelRef;import springfox.documentation.service.*;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spi.service.contexts.SecurityContext;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;import java.util.Collections;import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration@EnableSwagger2public class SwaggerConfig {  @Bean  public Docket createRestApi() {    ParameterBuilder parameterBuilder = new ParameterBuilder();    List<Parameter> parameters = Lists.newArrayList();    parameterBuilder        .name("token")        .description("token令牌")        .modelRef(new ModelRef("String"))        .parameterType("header")        .defaultValue("")        .required(false).build();    parameters.add(parameterBuilder.build());
    return new Docket(DocumentationType.SWAGGER_2)        .apiInfo(apiInfo())        .select()        //加了ApiOperation注解的类,才生成接口文档        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))        //包下的类,才生成接口文档        .apis(RequestHandlerSelectors.basePackage("com.chengdeshi.controller"))        .paths(PathSelectors.any())        .build()        .globalOperationParameters(parameters)        .securitySchemes(security());  }
  private ApiInfo apiInfo() {    return new ApiInfoBuilder()        .title("文档")        .description("文档")        .termsOfServiceUrl("https://www.choupangxia.com")        .version("4.0.0")        .build();  }
  private List<ApiKey> security() {    return newArrayList(        new ApiKey("token", "token", "header")    );  }
}

重点是构建了ParameterBuilder对象,并通过globalOperationParameters将其配置到Docket中。

此时展示效果如下: 

执行每个接口请求时都需要添加token值,除非写死默认值。


集成配置方案二

如果不想每次都填写这么一个token字段,每次都手动进行填写。那么可以通过统一全局配置。

对应的配置文件配置如下:​​​​​​​

import io.swagger.annotations.ApiOperation;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;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.SecurityReference;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spi.service.contexts.SecurityContext;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;import java.util.Collections;import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration@EnableSwagger2public class SwaggerConfig {  @Bean  public Docket createRestApi() {    return new Docket(DocumentationType.SWAGGER_2)        .apiInfo(apiInfo())        .select()        //加了ApiOperation注解的类,才生成接口文档        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))        //包下的类,才生成接口文档        .apis(RequestHandlerSelectors.basePackage("com.chengdeshi.controller"))        .paths(PathSelectors.any())        .build()        .securityContexts(securityContexts())        .securitySchemes(security());  }
  private ApiInfo apiInfo() {    return new ApiInfoBuilder()        .title("文档")        .description("文档")        .termsOfServiceUrl("https://www.choupangxia.com")        .version("4.0.0")        .build();  }
  private List<ApiKey> security() {    return newArrayList(        new ApiKey("token", "token", "header")    );  }
  private List<SecurityContext> securityContexts() {    return new ArrayList(        Collections.singleton(SecurityContext.builder()            .securityReferences(defaultAuth())            .forPaths(PathSelectors.regex("^(?!api).*$"))            .build())    );  }
  List<SecurityReference> defaultAuth() {    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];    authorizationScopes[0] = authorizationScope;    return new ArrayList(        Collections.singleton(new SecurityReference("token", authorizationScopes)));  }
}

此时重点是配置了Docket的securityContexts,通过该配置,设置了一个全局的变量“global”。注意defaultAuth方法中SecurityReference的第一个参数为你使用的token的key,我这里使用token。

此种方案展示效果如下:

在右上角会出现一个Authorize的选项。 

点击“Authorize”,弹出下图。 

在图中value的地方填写对应的token值,点击个Authorize。随后使用任何接口时都会在header部分添加对应token值。


​​​​​​​小结

当然上述是以token为例进行讲解的,如果你想通过header传输其他参数,也可以借鉴此方法。在此实例中大家切勿全部copy,在具体场景下需要修改对应的参数值来进行使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb学习笔记】8 - HTTP

一、常用文档 请求头 响应头 中间件获取的网页协议和返回的内容 这些称为HTTP协议 请求和响应 常见的请求头 响应头 状态码 HTTP状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务…

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因&#xff0c;笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中&#xff0c;不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

联邦蒸馏中的分布式知识一致性 | TIST 2024

联邦蒸馏中的分布式知识一致性 | TIST 2024 联邦学习是一种隐私保护的分布式机器学习范式&#xff0c;服务器可以在不汇集客户端私有数据的前提下联合训练机器学习模型。通信约束和系统异构是联邦学习面临的两大严峻挑战。为同时解决上述两个问题&#xff0c;联邦蒸馏技术被提…

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

【Go-自学版】03-即时通信系统1

1. 基础 server 构建 main.go | server.go // main.go package mainfunc main() {// http://127.0.0.1:8888/ server : NewServer("127.0.0.1", 8888)server.Start() }// server.go package mainimport ("fmt""net" )type Server struct {IP …

论文阅读《High-frequency Stereo Matching Network》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Zhao_High-Frequency_Stereo_Matching_Network_CVPR_2023_paper.pdf 源码地址&#xff1a; https://github.com/David-Zhao-1997/High-frequency-Stereo-Matching-Network 概述 在立体匹配研究领域…

MAC配置环境变量

1、配置 JAVA JDK 1.1、查看 JDK 安装目录 &#xff08;1&#xff09;可以在Android Studio中查看&#xff0c;复制该路径 &#xff08;2&#xff09;也可以在官网下载 Java JDK下载地址 mac中的安装地址是"资源库->Java->JavaVirtualMachines"中 1.2、…

Java - Mybatis的缓存机制、集成SpringBoot后缓存相关问题

mybaits提供一级缓存&#xff0c;和二级缓存 一级缓存&#xff08;默认开启&#xff09; 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象&#xff0c;在对象中有一个(内存区域)数据结构&#xff08;HashMap&#xff09;用于存储缓存数据。不同的sqlSe…

秒级监控、精准迅速:全面保障业务可用性 | 开源日报 No.101

louislam/uptime-kuma Stars: 41.1k License: MIT Uptime Kuma 是一个易于使用的自托管监控工具&#xff0c;主要功能和核心优势包括&#xff1a; 监控 HTTP(s) / TCP / HTTP(s) 关键词 / HTTP(s) Json 查询 / Ping / DNS 记录等服务的可用性提供时尚、响应迅速且良好用户体验…

STM32F407-14.3.1-01 时基单元

时基单元 可编程高级控制定时器的主要模块是一个 16 位计数器及其相关的自动重载寄存器。计数器可递增计数、递减计数或交替进行递增和递减计数。计数器的时钟可通过预分频器进行分频。 计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行…

VR串流线方案:实现同时充电传输视频信号

VR&#xff08;Virtual Reality&#xff09;&#xff0c;俗称虚拟现实技术&#xff0c;是一项具有巨大潜力的技术创新&#xff0c;正在以惊人的速度改变我们的生活方式和体验&#xff0c;利用专门设计的设备&#xff0c;如头戴式显示器&#xff08;VR头盔&#xff09;、手柄、定…

Kudu-架构与设计

Kudu架构与设计 一、背景1.存储组件2.使用场景3.多组件组合缺点3.1 架构复杂3.2 时效性低3.3 应对数据更新 二、Kudu概述1.设计特点2.框架适用场景3.框架不适用场景 三、数据模型与存储1.Table2.Tablet3.MetaData4.RowSet5.MemRowSet6.DiskRowSet6.1 Base Data6.2 Delta Stores…

spring结合设计模式之策略模式

策略模式基本概念&#xff1a; 一个接口或者抽象类&#xff0c;里面两个方法&#xff08;一个方法匹配类型&#xff0c;一个可替换的逻辑实现方法&#xff09;不同策略的差异化实现(就是说&#xff0c;不同策略的实现类) 使用策略模式替换判断&#xff0c;使代码更加优雅。 …

从docker镜像提取文件

1. 从Docker镜像提取JAR文件 Docker是一种流行的容器化平台&#xff0c;允许开发人员将应用程序及其所有依赖关系打包到一个容器中。这使得应用程序的部署和迁移变得更加简单和可靠。在某些情况下&#xff0c;我们可能需要从Docker镜像中提取JAR文件&#xff0c;以便进行进一步…

Dubbo 的 go 语言实现迎来了 Dubbo3 版本

新版本的 dubbo-go: 全面升级 Triple 协议,兼容 gRPC、标准 HTTP 客户端,提供简单明了的 API 用于编写 RPC server 与 client,解决组件间的基本通信问题。 针对微服务场景,提供了完善的服务治理能力,这包括配置管理、可观测性、流量管控规则、生态集成与适配等的全面升级…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

HTML常用表单元素使用?

目录 一、常用表单元素使用的关键字二、常用表单元素使用的效果与作用&#xff08;1&#xff09;password : 保护用户的隐私(2) email: 输入邮件&#xff08;比如QQ邮件&#xff09;(3)、number : 输入框只能输入数字&#xff08;4&#xff09;、tel : 常用于输入电话号&#x…

阿里云国际CDN加速图文和视频类网站操作教程

假设用户A需要加速一个小型的社区网站&#xff0c;加速需求和相关信息如下&#xff1a; 网站域名&#xff1a;c.9he.com。 加速内容&#xff1a;图片和文字为主&#xff0c;同时包含部分视频点播内容。 加速区域&#xff1a;仅中国内地&#xff0c;因为访问该网站的终端用户都…

IDEA卡顿,进行性能优化设置(亲测有效)——情况二

问题背景与现象 IDEA今天突然显示到期&#xff0c;于是从同事那边搞到一个很好用的破解方式&#xff0c;说实话&#xff0c;非常方便&#xff08;后续在安前码后中分享&#xff09; 破解之后呢&#xff0c;香了一阵子&#xff0c;但是突然显示开始卡顿&#xff0c;界面几乎是…

ChatGPT/GPT4应用:文本、论文、编程、绘图等,提高工作效率及科研项目开发能力

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…