SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
SAP UI5 应用在发送 OData batch 请求之前,会通过下列的_createBatchRequest
方法构造 batch 请求对象:
var oBatchRequest = that._createBatchRequest(aReadRequests);
该请求对象的 data 字段里,包含 batch 具体的 payload:
- Invoices?KaTeX parse error: Expected 'EOF', got '&' at position 7: skip=0&̲top=100&$orderby=ShipperName%20asc
- Invoices/$count
该请求头部字段 Accept 为 multipart/mixed:
然后通过 oWrappedBatchRequestHandle.oRequestHandle = that._submitBatchRequest(oBatchRequest, aBatchGroup, fnSuccess, fnError) 方法进行提交。
token handling 标志位为 true,且方法不为 POST,因此在执行 batch 操作之前,先要获取 CSRF token:
进入函数refreshSecurityToken
.
构造发起 token 请求的 request 对象:
url 为:https://services.odata.org/V2/Northwind/Northwind.svc/
首先尝试 head 请求,如果报错,再切换成 get 请求:
// Initially try method "HEAD", error handler falls back to "GET" unless the flag forbids HEAD requestif (this.bDisableHeadRequestForToken) {mTokenRequest.request = requestToken("GET", handleGetError);} else {mTokenRequest.request = requestToken("HEAD", handleHeadError);}
请求 token 的 HTTP 请求的 Content-type 设置逻辑,和标志位 bJson
有关:
request 对象:
最重要的头部字段 x-csrf-token
, 值被填充成 fetch:
function requestToken(sRequestType, fnError) {// trigger a read to the service url to fetch the tokenoRequest = that._createRequest(sUrl, "", sRequestType,that._getHeaders(undefined, true), null, null, !!bAsync);oRequest.headers["x-csrf-token"] = "Fetch";return that._request(oRequest, handleSuccess, fnError, undefined, undefined, that.getServiceMetadata());}
执行了 head 请求后,响应的状态码是 200,但是 responseText
字段值是空的。
还是进入 success callback:
使用 handler 读取 token 请求的 response,这个 handler 支持的 content-type 类型:application/atomsvc+xml;q=0.8, application/json;odata=fullmetadata;q=0.7, application/json;q=0.5, /;q=0.1
这里因为 response.body 是空的,因此进入不了 dispatchHandler
的处理逻辑:
然后进入 refreshToken 的 callback:
当然是拿不到 token 的:
进入 else 分支:
清除所有相关的 token 标志位:
ODataModel.prototype.resetSecurityToken = function() {delete this.oSharedServiceData.securityToken;delete this.oHeaders["x-csrf-token"];delete this.pSecurityToken;};
resolve 一个空的 token 给 callback:
这个 head 请求的响应码为 200,但是响应头部没有附带 csrf token:
更多Jerry的原创文章,尽在:“汪子熙”:
SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析相关推荐
- SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser
前一篇文章SAP UI5 应用的 OData 元数据请求响应的解析原理分析我们介绍了 SAP UI5 OData 元数据解析的入口.本文继续介绍基于 DOMParser 的 XML 数据解析原理. 入 ...
- SAP UI5里一个包含众多操作的OData请求url实例
这个例子位于SAP CRM Fiori应用My Opportunity: 创建Opportunity时,需要维护Account字段.输入一个字符后,产生一个OData请求,搜索Account的full ...
- SAP UI5 应用的调试标志位的本地存储逻辑 - local storage 使用的一个例子
We know that once we enable debug mode via "Ctrl+Alt+Shift+P", this setting will be persis ...
- SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2023年4月29日为止,目前已经更新了 183 篇,专栏完成度为 61%,完成度已经超过了一半了. 本套 ...
- 一步步使用SAP云平台的WebIDE开发SAP UI5应用
我们开发的这个SAP UI5应用需要消费一个OData服务,请求该服务得到一系列采购订单的数据,再显示到UI5应用上.所以需要先申请该OData服务所在的服务器ES5上的用户. 申请链接: https ...
- 如何在 SAP UI5 应用里显示 PDF 文件试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年12月23日为止,目前已经更新了 155 篇,专栏完成度为 51.6%,完成度已经超过了一半了. ...
- 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年11月19日为止,目前已经更新了 149 篇,专栏完成度为 49.6%. 作者简介 Jerry ...
- SAP UI5 SimpleForm 里在水平方向显示多组 Form 元素的实现方法试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年9月22日为止,目前已经更新了 133 篇,专栏完成度为 44.3%. 作者简介 Jerry W ...
- SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年9月22日为止,目前已经更新了 133 篇,专栏完成度为 44.3%. 作者简介 Jerry W ...
最新文章
- [Android问答] 开发环境问题集锦
- 2018 年,关于深度学习的 10 个预测
- 哪种云存储服务最适合你?
- Object-c学习之路二(oc内存管理黄金法则1)
- 网络流24题1 飞行员配对方案问题
- LeetCode 188. 买卖股票的最佳时机 IV(动态规划)
- Python图片爬虫
- SetStretchBltMode() 防止图片失真
- 读《我是一只IT小小鸟》有感
- windows处理回车和Linux,linux与windows回车换行符的区别
- 计算机考试关于计算量,2020年税务师考试计算器要求、考试教材变化及题型题量...
- 方舟代码_源代码丢失的方舟
- Clark变换与Park变换
- 小米笔记本解决风扇异响
- #includelt;和#include
- arthas离线包使用说明
- 【图论】关于邻接表建图
- 二类分类器构造多类分类器
- ISO26262标准
- JavaScript IP MAC 验证
热门文章
- php数组逗号连接,php – 如何使用逗号组合数组中的所有元素?
- .NET Core中文分词组件jieba.NET Core
- Zurmo - - 全局配置
- Tinkpad W540 BIOS bug ,中招了,中了一次还送了一次
- 程序员的奋斗史(三十五)——人在囧途之应聘篇(五)
- 2018-2019年度总结
- 【技巧总结】Penetration Test Engineer[2]-Information gathering
- 【设计模式】【行为型模式】模板模式
- (转)无特征过狗一句话猥琐思路
- 在JavaScript函数中使用EL表达式注意的事项