如何在Swagger2或Swagger3中增加Json Web Token
1. 前言
Swagger 3.0已经发布有一段时间了,作为一个非常有用的文档工具已经越来越多的项目在使用它。而JWT也是目前前后端分离最常用的安全技术。那么如何在Swagger 3.0 中添加JWT Token呢?今天胖哥就分享一下这个知识点。
2. Swagger2 中添加 JWT
我们先来回顾在Swagger2中是如何添加JWT的。在Swagger2中我们声明DocketBean 时利用全局参数注入一个Authorization请求头:
private List<Parameter> jwtToken() {
String jwt = "Bearer {jwt}";
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
// 声明 key
tokenPar.name("Authorization")
// 文字说明
.description("jwt令牌")
// 类型为字符串
.modelRef(new ModelRef("string"))
// 参数形式为 header 参数
.parameterType("header")
// 默认值
.defaultValue(jwt)
// 是否必须
.required(false);
pars.add(tokenPar.build());
return pars;
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.globalOperationParameters(jwtToken())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
效果如下,你只需要填充一个可用的Jwt Token即可。
swagger2中注入jwt请求头
但是这种方式只能适用于 Swagger2,在 Swagger3 中并不凑效。
3. Swagger3 中添加 JWT
那么Swagger3中应该如何做呢?Swagger3同样也是在声明DocketBean 中注入,如下:
@Bean
public Docket api() { return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.securitySchemes(Collections.singletonList(HttpAuthenticationScheme.JWT_BEARER_BUILDER
// 显示用
.name("JWT")
.build()))
.securityContexts(Collections.singletonList(SecurityContext.builder()
.securityReferences(Collections.singletonList(SecurityReference.builder()
.scopes(new AuthorizationScope[0])
.reference("JWT")
.build()))
// 声明作用域
.operationSelector(o -> o.requestMappingPattern().matches("/.*"))
.build()))
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
通过Swagger3中Docket提供的securitySchemes和securityReferences方法进行JWT的配置。效果以及流程如下:
Swagger3中jwt使用流程
我们可以看到请求时会携带一个Bearer Token:
Swagger3中携带jwt
感觉Swagger3中设置JWT比Swagger2中要麻烦一些,不过能用就行。
4. 总结
今天对Swagger2和Swagger3中设置JWT Token进行了分享,作为两种经常在项目中使用的工具,我们不需要知道具体的原理,只知道如何来简化我们的使用和开发即可。
如何在Swagger2或Swagger3中增加Json Web Token的更多相关文章
- JSON Web Token (JWT) 实现与使用方法
1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该 ...
- 如何在ASP.NET Core中使用JSON Patch
原文: JSON Patch With ASP.NET Core 作者:.NET Core Tutorials 译文:如何在ASP.NET Core中使用JSON Patch 地址:https://w ...
- 如何在SpringBoot中集成JWT(JSON Web Token)鉴权
这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...
- JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精. 突然发现整个十月份自己还没有写一篇博客......哎,说出来都是泪啊,最近加班实在实在实在是太多了,真的没有多余的时间写博客.这不,今天也在加班 ...
- Go实战--golang中使用JWT(JSON Web Token)
http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cook ...
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
在JavaScript前端技术大行其道的今天,我们通常只需在后台构建API提供给前端调用,并且后端仅仅设计为给前端移动App调用.用户认证是Web应用的重要组成部分,基于API的用户认证有两个最佳解决 ...
- android 中使用jwt token(json web token)--java
http://blog.csdn.net/mingzhnglei/article/details/51119836 下面贴上自己项目中的一个小小的example import com.nimbusds ...
- JWT(Json Web Token):一种在Web应用中安全传递信息的规范 转载
文本将介绍一种在Web应用中安全传递信息的方式,称为JWT. 本文内容是对JWT官网介绍说明的英文翻译而来,由于本文英文水平有限,如有错误,还请指出,谢谢. What is JSON Web Toke ...
- 什么是JWT(JSON WEB TOKEN)
转自于:http://www.jianshu.com/p/576dbf44b2ae 什么是JWT Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准( ...
随机推荐
- java 垃圾回收及内存分配策略
一.在垃圾收集器对堆进行回收前,首先需要判断对象是否"存活",对已经"死去"的对象进行回收 判断对象是否存活:引用计数法和可达性分析法 引用计数法:给对象添加一 ...
- linux 关于 环境变量
有关环境变量的文件 系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量 用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量 文件加载顺序: ==& ...
- 基于Lucene的全文检索实践
由于项目的需要,使用到了全文检索技术,这里将前段时间所做的工作进行一个实践总结,方便以后查阅.在实际的工作中,需要灵活的使用lucene里面的查询技术,以达到满足业务要求与搜索性能提升的目的. 一.全 ...
- 【解决方案】Pyinstaller打包exe策略(简单实用)
场景说明 在业务场景中, 经常需要Python开发一些小程序/脚本/GUI界面,进行简单的项目测试或未安装Python 的小伙伴们使用. 使用Pyinstaller将Python脚本或者项目打包,生成 ...
- VMware软件虚拟机不能全屏的问题 & CentOS 安装Vmware Tools
修改设置 1) 如下图右单击虚拟机名,选择[settings-],调出虚拟机设置界面. 2) 在设置界面选择[hardware]->[CD/DVD2(IDE)]->[Connection] ...
- uni-app路径规划(打开第三方地图实现)
百度网盘链接:https://pan.baidu.com/s/1-Ys13GFcnKXB1wkJotcwMw 提取码:16gp 把js文件放在common目录下 引入: import pathP ...
- 【Git 系列】一个超好用的命令你会用吗?
stash在英文意思是隐藏.git stash 的作用也是隐藏没完成的代码,防止它干扰别人或者新分支的工作. 一.背景 1.1 我们经常会遇到这样的情况 正在 dev 分支开发新功能,做到一半时有人过 ...
- python 字符串和demical转换
转成decimal格式 import decimal a="12" #判断是否是有数字 print(a.isdecimal()) #转化成decimal.Decimal格式 a1= ...
- 图片处理看这篇就完了「GitHub 热点速览 v.21.48」
作者:HelloGitHub-小鱼干 图像处理一直是个实用且热门的研究领域,而本周的 GitHub 项目则多个图像项目上榜.先是勉强和图像处理搭边的渲染引擎 Filament,它能渲染出效果极佳的 3 ...
- Docker namespace,cgroup,镜像构建,数据持久化及Harbor安装、高可用配置
1.Docker namespace 1.1 namespace介绍 namespace是Linux提供的用于分离进程树.网络接口.挂载点以及进程间通信等资源的方法.可以使运行在同一台机器上的不同服务 ...