首页 > 其他分享 >如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

时间:2022-10-05 11:06:24浏览次数:50  
标签:HTTP 试读 OData ABAP token 服务 SAP

正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。

作者简介

Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达 15 年的 SAP 标准产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign, SAP CRM, SAP Cloud for Customer, SAP S/4HANA, SAP Commerce Cloud(电商云)等标准产品的研发工作。

Jerry 对 SAP OData 服务的开发,测试,发布,部署,测试,及基于各种不同 SAP 技术实现的 OData 服务的幕后技术实现细节和使用场合,均有着深入的研究。

如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版_字段

基于 SEGW - Gateway Service Builder 的开发教程

  • 1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目
  • 2. 在 SAP ABAP 系统对事物码 SEGW 创建的 OData 服务进行配置并测试
  • 3. SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法
  • 4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南
  • 5. SAP ABAP OData 服务如何支持 $filter (过滤)操作
  • 6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务
  • 7. SAP ABAP OData 服务如何支持 $orderby (排序)操作
  • 8. SAP ABAP OData 服务如何支持创建(Create)操作
  • 9. SAP ABAP OData 服务如何支持删除(Delete)操作
  • 10. SAP ABAP OData 服务如何支持修改(Update)操作
  • 11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别
  • 12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值
  • 13. SAP ABAP OData 服务的分页加载数据集的实现(Paging)
  • 14. 几种 SAP ABAP OData 服务的性能评估和测试工具介绍
  • 15. SAP ABAP OData 服务里 EntityType 和 EntitySet 的区别
  • 16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作
  • 17. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据
  • 18. SAP ABAP OData 服务嵌套创建功能的实现步骤(Create Deep)
  • 19. 如何使用 ABAP 程序消费 SAP ABAP OData 服务
  • 20. 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务
  • 更多文章正在写作中,敬请期待

使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务

  • 正在写作中,敬请期待

使用 SAP Cloud Application Programming 编程模型开发 OData 服务

  • 正在写作中,敬请期待

本教程的前一步骤,我们使用 ABAP 代码,消费了我们自己开发的 OData 服务。

访问的 url 如下:

​https://{{host}}:{{port}}/sap/opu/odata/sap/ZBOOK_MANAGE_SRV/BookSet(guid'42010aee-2a94-1edd-8494-c9d14e91555e')​

这个 url 因为是简单的 HTTP GET 进行的读取操作,所以消费的时候,不需要在 HTTP 请求的头部字段里,传递 CSRF token 值。

本步骤我们继续学习一个复杂一点的场景,我们期望用 ABAP 代码触发一个 OData 服务的修改操作,使用的 HTTP 请求类型为 PUT. 因为涉及到业务数据的修改操作,所以 OData 服务协议规定,在提交这个修改操作时,HTTP 请求的头部字段,需要包含一个名叫 ​​x-csrf-token​​ 的字段,值为从 ABAP 服务器请求的 CSRF token 值。

如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版_服务器_02

关于这个数据修改的更多操作,参考本教程之前的步骤:

  • 10. SAP ABAP OData 服务如何支持修改(Update)操作
  • 11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别

简单地说,我们在 ABAP 代码里,需要实现的步骤,和我们在 Postman 里的操作完全一致。

首先使用 ABAP 代码,获取 CSRF token.

完整代码参考这篇文章。

请求 CSRF token 的代码,同前一步骤通过 ABAP 代码调用 OData 服务的读取操作相比,一个区别就是,我们需要在 HTTP 请求的头部字段里,增加一个名叫 ​​x-csrf-token​​​ 的字段,值为 ​​fetch​​.

如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版_字段_03

这样,我们可以利用 ​​get_header_field​​​ 方法,从 HTTP 响应头部字段里,获取名叫 ​​x-csrf-token​​ 字段的值,也就是服务器返回的 CSRF token,如下图调试器里所示。

紧接着进入程序的第二部分,新建第二个 if_http_client 实例,调用该实例向服务器发送第二个 HTTP PUT 请求,同时使用刚刚从服务器端获得的 CSRF token,作为 HTTP 头部字段 ​​x-csrf-token​​ 的值。

第二部分的代码如下。

两部分编写完毕,执行报表,在最后一行,从服务器得到的响应,居然是 ​​CSRF token validation failed​​:

如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版_数据_04

这就让人很费解了,为什么我们将​​第一个 HTTP 请求​​​,从服务器获取的 CSRF token,立即传递给了 ​​第二个 HTTP 请求​​的头部字段,为什么仍然遇到 CSRF token 验证失败的错误消息呢?

问题分析及解决方案在这里。

标签:HTTP,试读,OData,ABAP,token,服务,SAP
From: https://blog.51cto.com/jerrywangsap/5732372

相关文章

  • 同时多个axios请求怎么实现无痛刷新token
    需求最近遇到个需求:前端登录后,后端返回token和token有效时间,当token过期时要求用旧token去获取新的token,前端需要做到无痛刷新token,即请求刷新token时要做到用户无感知。......
  • SAP ABAP ALV 的一些总结:Custom container 和 Splitter container
    本文分以下四种情形来介绍。Customcontainer自定义容器可以使用CL_GUI_CUSTOM_CONTAINER类创建,但它需要一个可以放置它的父容器,或者需要在自定义屏幕中创建自定义控制区......
  • SAP UI5 应用的屏幕尺寸检测工作原理深入剖析试读版
    本教程之前的步骤:​​SAPUI5应用开发教程之一百三十四-SAPUI5SimpleForm属性columnsL,columnsM,columnsXL的属性深入剖析​​我们深入分析了SAPUI5SimpleForm控......
  • SAP UI5 应用 SimpleForm 控件 ResponsiveGridLayout 布局的工作原理深入剖析试读版
    写作动机笔者在编写本步骤时,在网上搜索了一番,没有找到高质量的中文技术文章,能够讲清楚SAPUI5的屏幕尺寸检测机制。同时SAPUI5XML视图里很多带有S,M,L和XL后缀的控......
  • SAP UI5 SimpleForm 里在水平方向显示多组 Form 元素的实现方法试读版
    一套适合SAPUI5初学者循序渐进的学习教程本专栏计划的文章数在​​300​​​篇左右,到​​2022年9月22日​​​为止,目前已经更新了​​133​​​篇,专栏完成度为​......
  • 前端无痛刷新Token
    前端无痛刷新Token这个需求场景很常见,几乎很多项目都会用上,之前项目也实现过,最近刚好有个项目要实现,重新梳理一番。需求对于需要前端实现无痛刷新Token,无非就两种:请求前判断......
  • Spring boot+VUE使用token实现登录验证及退出
    Springboot+VUE实现token验证Vue+SpringBoot实现token认证主要可分为六步:1.前端登录,post用户名和密码到后端。2.后端验证用户名和密码,若通过,生成一个token返回给前端......
  • ABAP语法笔记08 - 事件2和GUI状态
    ATLINE-SELECTION."双击行的时候触发的事件一般用来跳转TOP-OF-PAGEDURINGLINE-SELECTION."双击行显示的次级表单的抬头执行逻辑 GETCURSORFIELDfi......
  • ABAP使用WRITE画表格
    WRITE:/1(Y)SY-ULINE."输出长度为Y的横线LOOPATLTINTOLS.WRITE:/1SY-VLINENO-GAP,"不写X时,默认为字段长度,居中必须指定X占位长度(X)LS-F......
  • ABAP语法笔记07 - SELECT
    "基本的查询语句"从表中满足条件的数据,按GT字段顺序放入数据(字段信息不匹配会取值错误)SELECTFIELDNAMEFROMTAB_NAMEINTOTABLEGTWHEREexpression."添加CO......