我正在尝试在SPA中使用SAPUI5来显示TEIID / Wildfly ODataV4服务中的数据。当SAPUI5 ODATA V4数据模型绑定到服务时,我遇到了几个错误。因此,我通过代理(grunt-connect-proxy2)连接到odata服务。基本身份验证有效。所附图像(屏幕快照1)中标记的服务文件夹上方的元数据文件是该服务的实际元数据文件,如您所见,该文件已正确加载。因此,没有CORS问题或授权问题。
Screenshot1
据我了解,该问题似乎与CSRF令牌请求有关。似乎Teiid / Wildfly没有回答CSRF令牌获取请求。有没有一种方法可以配置Wildfly来回答请求,或者是否可以禁用odata V4模型的CSRF请求?我已经在odata V2模型的构造函数中看到了这样一个选项。工作配置看起来如何?
以下是浏览器日志中的屏幕截图:
我观察到另一个问题,从中我不知道它是否与前一个问题有关(也有X-CSRF-Token:涉及获取),或者某个地方是否还有其他遗漏。当我使用聚合绑定将odata集合绑定到sapui5列表时,发生第二个问题。响应看起来像
请求网址:http://localhost:9001/odata4/svc/my_nutri_diary/ $ batch 请求方法:POST状态代码:406不可接受的远程地址: [:: 1]:9001推荐人政策:降级时无推荐人回复 Headersview源访问控制允许凭据:true access-control-allow-origin:http://localhost:9001缓存控制: 无缓存,无存储,必须重新验证的连接:关闭 内容编码:gzip内容长度:125内容类型: application / json; odata.metadata =最短日期:2018年11月12日,星期一 20:04:30 GMT到期:0 odata版本:4.0编译指示:无缓存服务器: WildFly / 11 x-powered by:Undertow / 1 Request Headersview源接受: 多部分/混合的Accept-Encoding:gzip,deflate,br Accept语言:de 授权:基本SU1TVXNlcjpJTVM0Zm9ydW0l连接:keep-alive 内容长度:329内容类型:多份/混合; boundary = batch_id-1542053070786-11 Cookie:sidebar_collapsed = false; cycle_analytics_help_dismissed = 1; __utmz = 111872281.1539128843.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无); __utma = 111872281.767670437.1539128843.1541866362.1541870562.42 DNT:1主机:localhost:9001 MIME版本:1.0 OData-MaxVersion:4.0 OData版本:4.0来源:http://localhost:9001引用者: http://localhost:9001/用户代理:Mozilla / 5.0(iPhone; CPU iPhone OS 11_0,例如Mac OS X)AppleWebKit / 604.1.38(KHTML,例如Gecko) 版本11.0移动版/ 15A372 Safari / 604.1 X-CSRF-令牌:提取 X-Requested-With:XMLHttpRequest请求有效负载 --batch_id-1542053070786-11 Content-Type:应用程序/ http Content-Transfer-Encoding:二进制GET配置文件?$ skip = 0&$ top = 100 HTTP / 1.1 接受:application / json; odata.metadata = minimal; IEEE754Compatible = true 接受语言:de 内容类型:应用程序/ json;字符集= UTF-8; IEEE754Compatible = true --batch_id-1542053070786-11-
感谢您的建议!
最好的问候, 克里斯托夫
关于搜索替代方法的进一步说明:由于我目前正在寻找一种能够使用odata.v4模型的替代方法,因此我发现了以下博客文章:
https://blogs.sap.com/2015/08/05/disable-csrf-token-for-odata-calls-using-sap-netweaver-gateway/
但是,该方法似乎不适用于odata.v4模型,因为它具有不同的接口。没有setHeaders()函数可在数据模型上设置自定义标头。因此,我尝试通过
设置标题$。ajaxSetup({headers:{'X-Requested-With':'X'}});
不幸的是,这也不起作用。如果某人的Odata.v4模型与TEIID或Olingo v4一起运行,那么如果他能给我有关他如何解决此问题的反馈,那就太好了。