我正在做一个Android应用程序,它在java中使用来自SAP Gateway的OData。在这一刻,我能够从网关检索数据,但是当我想要更新或创建某些内容时,会发生错误,说出"预期状态正常或没有内容" ....我在互联网上阅读我需要在GET中检索CSRF令牌并在post和put操作上设置它....如何在Android应用程序中从SAP Gateway使用OData并使用OData4j?我创建消费者的代码是:
ODataConsumer consumer = ODataConsumers.create(serviceUrl);
ODataConsumer.Builder builder = ODataConsumers.newBuilder(serviceUrl);
builder.setClientBehaviors(new BasicAuthenticationBehavior("myuser", "mypass"));
consumer = builder.build();
就像你可以看到的那样,我有基本的身份验证,但却错过了csrf令牌......
我希望你能帮助我。
非常感谢,
博尔哈。
答案 0 :(得分:0)
设置builder
对象的客户端行为时,传递参数BasicAuthenticationBehavior
对象,传递新的SAPCSRFBehaviour
对象..
builder.setClientBehaviors(new BasicAuthenticationBehavior(serviceLocation.getUserName(), serviceLocation.getPassword()), new SAPCSRFBehaviour());
How to handle CSRF tokens while consuming Gateway services using odata4j
答案 1 :(得分:0)
你需要首先使用标头集来调用odata服务来获取令牌。 然后使用令牌进行调用。
**request = request.header("X-CSRF-Token", "Fetch")**
如果交叉脚本攻击令牌使用处于活动状态,则默认情况下,您必须执行此调用 第一
使用getway测试调用工具或执行ODATA调用的任何正在运行的UI5应用程序,并跟踪您将看到发送令牌请求的调用。