0

我正在做一个 Android 应用程序,它在 Java 中使用来自 SAP Gateway 的 OData。此时,我可以从网关检索数据,但是当我想更新或创建某些内容时,会出现“预期状态正常或无内容”的错误......我正在互联网上阅读,我需要在 GET 中检索 CSRF 令牌并将其设置为 post 和 put 操作.... 如何在使用 SAP Gateway 中的 OData 并使用 OData4j 的 android 应用程序中执行此操作?我创建消费者的代码是这样的:

            ODataConsumer consumer = ODataConsumers.create(serviceUrl);
            ODataConsumer.Builder builder = ODataConsumers.newBuilder(serviceUrl);
            builder.setClientBehaviors(new BasicAuthenticationBehavior("myuser", "mypass")); 
            consumer = builder.build();

正如你所看到的,我有基本的身份验证,但它错过了 csrf 令牌......

我希望你能帮助我。

非常感谢,

博尔哈。

4

2 回答 2

0

您需要首先调用设置了标头的 odata 服务以获取令牌。然后您使用令牌拨打电话。

**request = request.header("X-CSRF-Token", "Fetch")**  

如果跨脚本攻击令牌使用处于活动状态,默认情况下,您必须先执行此调用。

使用 getway 测试调用工具,或任何运行 ODATA 调用并跟踪调用的 UI5 应用程序,您将看到发送的令牌请求。

于 2015-02-02T15:11:24.137 回答
0

设置对象的客户端行为时builder,传递参数BasicAuthenticationBehavior对象,传递新SAPCSRFBehaviour对象..

builder.setClientBehaviors(new BasicAuthenticationBehavior(serviceLocation.getUserName(), serviceLocation.getPassword()), new SAPCSRFBehaviour());

如何在使用 odata4j 使用网关服务时处理 CSRF 令牌

于 2015-01-28T02:47:45.400 回答