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 请求逻辑解析相关推荐

  1. SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser

    前一篇文章SAP UI5 应用的 OData 元数据请求响应的解析原理分析我们介绍了 SAP UI5 OData 元数据解析的入口.本文继续介绍基于 DOMParser 的 XML 数据解析原理. 入 ...

  2. SAP UI5里一个包含众多操作的OData请求url实例

    这个例子位于SAP CRM Fiori应用My Opportunity: 创建Opportunity时,需要维护Account字段.输入一个字符后,产生一个OData请求,搜索Account的full ...

  3. SAP UI5 应用的调试标志位的本地存储逻辑 - local storage 使用的一个例子

    We know that once we enable debug mode via "Ctrl+Alt+Shift+P", this setting will be persis ...

  4. SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2023年4月29日为止,目前已经更新了 183 篇,专栏完成度为 61%,完成度已经超过了一半了. 本套 ...

  5. 一步步使用SAP云平台的WebIDE开发SAP UI5应用

    我们开发的这个SAP UI5应用需要消费一个OData服务,请求该服务得到一系列采购订单的数据,再显示到UI5应用上.所以需要先申请该OData服务所在的服务器ES5上的用户. 申请链接: https ...

  6. 如何在 SAP UI5 应用里显示 PDF 文件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年12月23日为止,目前已经更新了 155 篇,专栏完成度为 51.6%,完成度已经超过了一半了. ...

  7. 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年11月19日为止,目前已经更新了 149 篇,专栏完成度为 49.6%. 作者简介 Jerry ...

  8. SAP UI5 SimpleForm 里在水平方向显示多组 Form 元素的实现方法试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年9月22日为止,目前已经更新了 133 篇,专栏完成度为 44.3%. 作者简介 Jerry W ...

  9. SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年9月22日为止,目前已经更新了 133 篇,专栏完成度为 44.3%. 作者简介 Jerry W ...

最新文章

  1. [Android问答] 开发环境问题集锦
  2. 2018 年,关于深度学习的 10 个预测
  3. 哪种云存储服务最适合你?
  4. Object-c学习之路二(oc内存管理黄金法则1)
  5. 网络流24题1 飞行员配对方案问题
  6. LeetCode 188. 买卖股票的最佳时机 IV(动态规划)
  7. Python图片爬虫
  8. SetStretchBltMode() 防止图片失真
  9. 读《我是一只IT小小鸟》有感
  10. windows处理回车和Linux,linux与windows回车换行符的区别
  11. 计算机考试关于计算量,2020年税务师考试计算器要求、考试教材变化及题型题量...
  12. 方舟代码_源代码丢失的方舟
  13. Clark变换与Park变换
  14. 小米笔记本解决风扇异响
  15. #includelt;和#include
  16. arthas离线包使用说明
  17. 【图论】关于邻接表建图
  18. 二类分类器构造多类分类器
  19. ISO26262标准
  20. JavaScript IP MAC 验证

热门文章

  1. php数组逗号连接,php – 如何使用逗号组合数组中的所有元素?
  2. .NET Core中文分词组件jieba.NET Core
  3. Zurmo - - 全局配置
  4. Tinkpad W540 BIOS bug ,中招了,中了一次还送了一次
  5. 程序员的奋斗史(三十五)——人在囧途之应聘篇(五)
  6. 2018-2019年度总结
  7. 【技巧总结】Penetration Test Engineer[2]-Information gathering
  8. 【设计模式】【行为型模式】模板模式
  9. (转)无特征过狗一句话猥琐思路
  10. 在JavaScript函数中使用EL表达式注意的事项