Spring Security:如何在Postman中优雅地测试后端API(前后端分离)
前言
在Postman中可以编写和执行自动化测试,使用 JavaScript 编写基本的 API 测试,自由编写任何用于自动化测试的测试方案。
在POSTMAN中读取Cookie值
1. 我们需要向“ /doLogin”Web API 发送请求以接收用户详细信息以登入系统,但我们不能直接发送请求。
2. 我们需要发送一个登录请求(具有有效的凭据)以接收令牌作为 Cookie 值 ,然后将其设置为“环境变量”。
3. 最后,我们将在请求标头中使用“环境变量” 将授权的请求发送到“/doLogin”Web API。
具体流程
1. 准备正确的登录表单,即用户名和密码是有效的,发送请求给Spring Security后端应用。此时请求没有带有令牌,后端检查这个请求没有带有令牌token,就会利用 CookieCsrfTokenRepository 来生成并返回一个 Token 放进 Cookie 中并返回给发送请求的 Postman。

2. 如下面的截图所示,我们收到了名为 'XSRF-TOKEN' 的 Cookie,这是我们的令牌,我们需要以编程方式(使用JavaScript)从 Tests 测试编辑器中读取该令牌并将其设置为 Environment 变量,如以下快照所示:(服务端的 response 的 body 内容是 Spring Security 自动生成的登录表单页面,带有 _csrf 令牌参数,这里就不截图了)

Postman 不会将 cookie 作为响应标头的一部分来处理,相反,postman从chrome(使用拦截器插件)接收cookie,以读取从响应接收到的cookie,postman向我们提供了以下方法:
postman.getResponseCookie("Cookie-name")
第1行: token1 被声明为新变量,用于保存 getResponseCookie("XSRF-TOKEN").value 方法中的值以读取 'XSRF-TOKEN' 的 cookie 值。
第2行:如图所示,'XSRF-TOKEN' cookie的值在两行中被接收, 这在我们的 cookie 值中添加了一个新行字符“ <br/>”,我们需要摆脱它来接收正确的cookie值,因此我们使用 JavaScript replace函数从字符串中查找换行符,并将其替换为空字符“”。
第3行:我们使用 Postman 提供的方法来设置 token2 变量,该变量现在包含正确的 cookie 值,并将其设置为名称为 'X-CSRF-TOKEN' 的“环境变量”,我们可以将其用作变量 {{X-CSRF-TOKEN}} 在其他请求中。
3. 编辑并保存上面的代码后,转到 POSTMAN -> 管理环境 -> Pentest Environment ->编辑并添加 'X-CSRF-TOKEN' 作为变量和 {{X-CSRF-TOKEN}} 作为值(注意上面截图左上角),如下所示:

4. 转到 "/doLogin" Web API选项卡 -> 单击下面 Header选项 -> 打开并添加 'X-CSRF-TOKEN' 作为变量和 {{X-CSRF-TOKEN}} 作为值,如下所示:

5. 转到 "/doLogin" Web API,再次发送 Send 请求,脚本将被执行,并且将 'X-CSRF-TOKEN' 设置为环境变量,你将获得响应,并返回数据,就像经过身份验证的请求一样,如下面的截图所示:

参考:参考1
Spring Security:如何在Postman中优雅地测试后端API(前后端分离)的更多相关文章
- 如何在MyBatis中优雅的使用枚举
问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: public enum ComputerState { OPEN(10), //开启 CLOSE( ...
- 如何在 Swoole 中优雅的实现 MySQL 连接池
如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...
- spring security进阶 使用数据库中的账户和密码认证
目录 spring security 使用数据库中的账户和密码认证 一.原理分析 二.代码实现 1.新建一个javaWeb工程 2.用户认证的实现 3.测试 三.总结 spring security ...
- Spring Security在登录验证中增加额外数据(如验证码)
在使用Spring Security框架过程中,经常会有这样的需求,即在登录验证时,附带增加额外的数据,如验证码.用户类型等.下面将介绍如何实现. 注:我的工程是在Spring Boot框架基础上的, ...
- 如何在Vue中优雅的使用防抖节流
1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_17-认证接口开发-申请令牌测试
远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1 -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestCl ...
- 如何在DevOps中实施连续测试
在过去的十年中,对软件开发的需求已急剧发展.软件已成为公司获得竞争优势的关键优势,特别是如果您的公司属于SaaS范畴.通过在SDLC中实施瀑布等传统流程,组织现在正在向敏捷过渡,以便以更快的速度在市场 ...
- Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...
- vue 项目中使用mock假数据实现前后端分离
也是查了很多的资料,整理出来.实现了前后端的分离,用到的技术vue-cli,webpack,node,json-server.首先全局安装json-server cnpm i json-server ...
随机推荐
- Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能
前言 在使用PRISM+WPF开发项目的过程中,需要使用AutoMapper实现对象-对象的映射功能.无奈PRISM没有相关对AutoMapper相关的类库,于是转换一下思想,在nuget 中存在有关 ...
- Mac下Sublime Text3配置Python开发环境
设置Sublime Text的语法为python View -> syntax ->python 设置编译环境(默认python版本2.7) Tools -> Build Syste ...
- HDU2647Reward (拓扑排序)
Reward Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he w ...
- Django学习day15BBS项目开发2.0
每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...
- STM32L0系列EEPROM中结构体的读取
在STM32L0中操作EEPROM本来参考了上篇操作FLASH的方法,多多少少都有些问题.我觉得可能是结构体在转换成其他变量的时候出了问题. 比如下面这段代码,在Windows上可以正常运行(使用g+ ...
- 简述编写Django应用的基本步骤
(1)创建项目,cd到一个你想要放置你代码的目录.Django -admin startproject mysite. Django project即一个Django项目实例需要的设置项的集合,包括数 ...
- Qt中的ui文件转换为py文件
将pyuic5 -o demo.py demo.ui写入ui-py.bat文件(自定义文件),将ui文件与ui-py.bat文件放在同一文件夹,双击.bat文件即可生成.py文件
- 防刷功能的实现(thinkphp5)
$seconds = '3'; //时间段[秒] $refresh = '3';//最大次数 $cur_time = time(); if(Session::get('refresh_times')) ...
- P3426-[POI2005]SZA-Template【KMP】
正题 题目链接:https://www.luogu.com.cn/problem/P3426 题目大意 给出一个长度为\(n\)的字符串\(s\),求一个长度最小的字符串\(t\)使得\(s\)所有\ ...
- selenium--常用判断
获取页面 title 的方法可以直接用 driver.title 获取到,然后也可以把获取到的结果用做断言.1.首先导入 expected_conditions 模块:from selenium.we ...