1

我创建了一个 S4SDK 项目

mvn archetype:generate -DarchetypeGroupId=com.sap.cloud.s4hana.archetypes \
  -DarchetypeArtifactId=scp-cf-tomee -DarchetypeVersion=LATEST

我修改了HelloWorldServlet一个doPost方法,但我根本无法获得一个 POST 请求来访问它。我总是得到 HTTP 状态 403 禁止响应。

如何使用 S/4HANA Cloud SDK tomee 原型进行 REST 开发?

4

2 回答 2

4

如果您查看失败请求的响应标头,您可能会看到一个标头X-CSRF-Token: Required。CSRF 令牌可保护您的应用程序用户免于成为在您的应用程序中执行不需要的操作的攻击的受害者。

因此,任何状态更改操作,例如PUTand POST,都需要一个有效的 CSRF 令牌,以确保该操作是由调用它的经过身份验证的用户真正想要的。CSRF 令牌可以作为任何先前无副作用请求的一部分获取,例如GET. 只需将标头附加X-CSRF-Token: fetch到您的请求并从响应标头中提取返回值X-CSRF-Token: abc123。最后,确保将提取的值作为X-CSRF-Token: abc123下一个修改请求的标头发送。然后一切都应该按预期工作。

更多信息可以参考: http ://www2.hu-berlin.de/newlogic/docs/config/filter.html#CSRF_Prevention_Filter_for_REST_APIs/Basic_configuration_sample

于 2018-04-12T09:09:22.813 回答
0

S4SDK 的默认安全配置包含一个跨站点请求伪造 (CSRF) 预防过滤器 - 对其进行注释以使 REST API 开发简单 - 但要注意CSRF 问题以及CSRF 与 cookie的关系- 基本上确保没有使用 cookie添加这些注释之前和之后的 REST 应用程序:

<!-- disabled to make REST work - AUTHN/AUTHZ MUST NOT USE COOKIES!
<filter>
    <filter-name>RestCsrfPreventionFilter</filter-name>
    <filter-class>org.apache.catalina.filters.RestCsrfPreventionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>RestCsrfPreventionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
-->
于 2018-04-12T08:35:16.820 回答