SpringDoc基础配置和集成OAuth2登录认证教程

本期内容

  1. 学会通过注解和Java代码的方式添加SpringDoc配置。
  2. 在swagger-ui提供的页面上提供OAuth2登录认证,在集成Security的情况下便捷获取access_token并在请求时按照OAuth2规范携带。

为什么集成OAuth2登录认证?

现在大部分教程是在swagger-ui页面添加一个请求头,使用时先去获取一个token,然后再将获取的token填充至页面的token输入框内,如果是通过某个接口自己生成token的方式使用这种配置没什么太大问题,但是如果是通过OAuth2登录获取token时就比较麻烦,要填充token type和access token,所以在swagger-ui提供的页面中提供OAuth2登录的入口,OAuth2登录自动配置,一步到位。

配置方式说明

SpringDoc提供了两种方式来添加配置:

  1. 注解
  2. Java类的方式

注解

注解配置类

配置方式如下代码所示,详细内容请看代码中的注释

package com.example.config;import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import io.swagger.v3.oas.annotations.security.OAuthFlow;
import io.swagger.v3.oas.annotations.security.OAuthFlows;
import io.swagger.v3.oas.annotations.security.OAuthScope;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import io.swagger.v3.oas.annotations.security.SecuritySchemes;
import org.springframework.context.annotation.Configuration;/*** Spring Doc OpenApi 注解配置** @author vains*/
@Configuration
@OpenAPIDefinition(info = @Info(// 标题title = "${custom.info.title}",// 版本version = "${custom.info.version}",// 描述description = "${custom.info.description}",// 首页termsOfService = "${custom.info.termsOfService}",// licenselicense = @License(name = "${custom.license.name}",// license 地址url = "http://127.0.0.1:8080/example/test01")),// 这里的名字是引用下边 @SecurityScheme 注解中指定的名字,指定后发起请求时会在请求头中按照OAuth2的规范添加tokensecurity = @SecurityRequirement(name = "${custom.security.name}")
)
@SecuritySchemes({@SecurityScheme(// 指定 SecurityScheme 的名称(OpenAPIDefinition注解中的security属性中会引用该名称)name = "${custom.security.name}",// 指定认证类型为oauth2type = SecuritySchemeType.OAUTH2,// 设置认证流程flows = @OAuthFlows(// 设置授权码模式authorizationCode = @OAuthFlow(// 获取token地址tokenUrl = "${custom.security.token-url}",// 授权申请地址authorizationUrl = "${custom.security.authorization-url}",// oauth2的申请的scope(需要在OAuth2客户端中存在)scopes = {@OAuthScope(name = "openid", description = "OpenId登录"),@OAuthScope(name = "profile", description = "获取用户信息"),@OAuthScope(name = "message.read", description = "读"),@OAuthScope(name = "message.write", description = "写")}))
)})
public class SpringDocAnnoConfig {
}

yml中的配置

custom:info:title: example-apiversion: 0.0.1description: 这是一个使用SpringDoc生成的在线文档.terms-of-service: http://127.0.0.1:8080/example/test01license:name: Apache 2.0security:name: Authenticatetoken-url: http://kwqqr48rgo.cdhttp.cn/oauth2/tokenauthorization-url: http://kwqqr48rgo.cdhttp.cn/oauth2/authorize

注意:要想请求时携带登录获取的access_token@OpenAPIDefinition注解中必须指定security属性,并且name值要和@SecurityScheme注解中的name属性一致。

还有一件事,@SecuritySchemes注解可以直接替换为@SecurityScheme注解,只指定一种认证方式。

还有一件事,使用注解的方式可以直接从yml中获取yml配置文件中的值,当然也可以直接使用具体的常量值(e.g. @License注解中的url属性)。

还有一件事,如果该配置类上只有@OpenAPIDefinition@SecurityScheme注解,并且该配置类中没有任何实现,则该配置类会在本机编译时消失,请添加@Configuration注解避免这种情况。
官网原文:If you give @OpenAPIDefinition or @SecurityScheme to a class that has no implementation, that class will disappear when you natively compile. To avoid this, give the class a @Configuration.

还有一件事…

Java代码配置

这里的注意事项和上边注解配置是一样的,不过由注解转为了Java类。

配置方式如下代码所示,详细内容请看代码中的注释

package com.example.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.Scopes;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Spring Doc OpenApi Java代码配置** @author vains*/
@Configuration
public class SpringDocBeanConfig {@Beanpublic OpenAPI customOpenAPI() {// 基础信息Info info = new Info().title("example-api-java").version("0.0.1").description("这是一个使用SpringDoc生成的在线文档.").termsOfService("http://127.0.0.1:8080/example/test01").license(new License().name("Apache 2.0").url("http://127.0.0.1:8080/example/test01"));// 组件Components components = new Components();// 安全认证组件SecurityScheme securityScheme = new SecurityScheme();// 创建一个oauth认证流程OAuthFlows oAuthFlows = new OAuthFlows();// 设置OAuth2流程中认证服务的基本信息OAuthFlow oAuthFlow = new OAuthFlow()// 授权申请地址.authorizationUrl("http://kwqqr48rgo.cdhttp.cn/oauth2/authorize")// 获取token地址.tokenUrl("http://kwqqr48rgo.cdhttp.cn/oauth2/token").scopes(new Scopes().addString("openid", "OpenId登录").addString("profile", "获取用户信息").addString("message.read", "读").addString("message.write", "写"));// 使用授权码模式oAuthFlows.authorizationCode(oAuthFlow);// OAuth2流程securityScheme.flows(oAuthFlows).type(SecurityScheme.Type.OAUTH2);// 安全认证名String securityName = "Authenticate";// 将认证配置加入组件中components.addSecuritySchemes(securityName, securityScheme);SecurityRequirement securityRequirement = new SecurityRequirement();// 将安全认证和swagger-ui关联起来securityRequirement.addList(securityName);return new OpenAPI()// 基础描述信息.info(info)// 添加OAuth2认证流程组件.components(components)// 添加请求时携带OAuth2规范的请求头(通过OAuth2流程获取token后发请求时会自动携带Authorization请求头).addSecurityItem(securityRequirement);}}

效果预览

启动项目后打开提供的在线文档地址:

http://127.0.0.1:8080/swagger-ui/index.html
效果展示

右侧多了一个Authorize按钮。
操作演示流程如下
操作演示

其它基础配置

关于springdoc-openapi-core-properties和swagger-ui properties在官网中有详细的介绍了,就不展开说明了,读者可以对照文档在yml中添加自己的相关配置。

附录

  1. SpringDoc官网
  2. 代码仓库:Gitee、Github

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

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

相关文章

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本

利用shell命令写的脚本文件,后缀是.sh shell脚本是一个解释型语言,不需要编译,可直接执行 书写:vi test.sh #!/bin/bash:说明使用的是/bin目录下的bash 说明完后即可编写脚本文件 bash test.sh:运行文…

LDAP概念和原理介绍

相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始介绍之前先来看几个问…

卷积神经网络(CNN)天气识别

文章目录 前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)我的环境: 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作 1. 设置GP…

【深度学习实验】网络优化与正则化(七):超参数优化方法——网格搜索、随机搜索、贝叶斯优化、动态资源分配、神经架构搜索

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、优化算法0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正:动量法Momen…

【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解

文章目录 🎋字体属性🚩设置字体🚩字体大小🚩字体粗细🚩文字样式 🎍文本属性🚩文本颜色🎈认识 RGB🎈设置文本颜色 🚩文本对齐🚩文本装饰&#x1f6…

销售团队可以借助CRM系统做什么?

销售主管都想有一支效率高、质量高的销售团队,无论对于初创企业还是大型企业销售团队都是企业盈利的主力部门,直接为企业带了业绩。如何提升销售团队水平?离不开CRM系统的辅助,CRM软件能为销售团队提供哪些支持?下面我…

MISRA 2012学习笔记(5)-Rules 8.10

文章目录 Rules8.10 基本类型模型(The essential type model)8.10.1 原理8.10.2 基本类型(Essential type)Rule 10.1 操作数不得具有不适当的基本类型Rule 10.2 在加减法运算中,不得不当使用本质为字符类型的表达式Rule 10.3 表达式的值不得赋值给具有较窄基本类型或…

系列一、介绍

一、概述 官网: ThreadLocal用于提供线程内的局部变量,不同线程之间不会互相干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量传递的复杂度。 大白话: 线程并发:T…

编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载

编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载。 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件…

Linux本地docker一键部署traefik+内网穿透工具实现远程访问Web UI管理界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

HINSTANCE是什么?

HINSTANCE 就是 HMODULE:

代码随想录 Day50 单调栈 LeetCodeT503 下一个最大元素II T42接雨水

前言 前面我们说到了单调栈的第一题,下一个最大元素I,其实今天的两道题都是对他的变种,知道第一个单调栈的思想能够想清楚,其实这道题是很简单的 考虑好三个状态,大于等于小于,其实对于前面这些题目只要细心的小伙伴就会发现其实小于和等于的处理是一样的都是直接入栈,只有大于…

prometheus基本介绍 prometheus和zabbix的区别 grafana可视化工具

一、 promethues概念prometheus介绍promethues的特点prometheus的工作原理prometheus的架构 二、promethues和zabbix的区别三、prometheus安装部署prometheus下载安装prometheus启动浏览器访问查看暴露指标将Prometheus配置为systemd管理 配置node_exporter监控项node_promethe…

redis cluster搭建

k8s部署 Redis Insight k8s部署redis集群_mob6454cc6c6291的技术博客_51CTO博客 占用的内存竟然这么小,才200M左右 随便选个节点进去,看能否连接上其他节点 redis-cli -h redis-cluster-v1-0.redis-cluster.project-gulimall.svc.cluster.local 再创建个…

表内容的操作(增删查改)【MySQL】

文章目录 表的 CRUDCreate(增加)插入记录插入冲突则更新记录替换记录 Retrieve(查找)查找记录指定表达式的别名为结果去重WHERE 子句运算符条件查询区间查询模糊查询空值查询 对结果排序筛选分页结果 Update(修改&…

【Java程序员面试专栏 算法训练篇】二叉树高频面试算法题

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是二叉树相关汇总的高频题目 遍历二叉树 遍历二叉树,分为递归和迭代两种方式,递归类似于DFS,迭代类似于BFS,【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍…

解决在pycharm中使用matplotlib画图问题

第一,再导入包后直接绘图出现: AttributeError: module backend_interagg has no attribute FigureCanvas表明版本不兼容,我们需要加入:matplotlib.use(‘TkAgg’) 导入函数就变成了: import matplotlib matplotlib.…

clickhouse分布式之弹性扩缩容的故事

现状 社区不支持喔,以后也不会有了。曾经尝试过,难道是是太难了,无法实现吗?因为他们企业版支持了,可能是利益相关吧,谁知道呢,毕竟开源也要赚钱,谁乐意一直付出没有回报呢。 社区…

桌面运维。

Windows运行命令: color 01/02切换字符颜色cls 清屏ipconfig 设备的ip信息ipconfig /all 设备ip的所有信息 破解系统密码: 进PE系统,使用里面的工具破解 vmware workstation安装 网卡 网卡:ncpa.cpl window远程控制 mstsc …

Java引用类型(String)

目录 String解析 final的作用 String是否有长度限制 StringBuffer解析 StringBuilder解析 关键字、操作类相关 引用数据类型非常多大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型。String类型就是引用类型。 String解析 JVM运行时会分…