Rest 使用S/4HANA Cloud SDK休息:Tomee原型项目返回403禁止发布/放置/删除

Rest 使用S/4HANA Cloud SDK休息:Tomee原型项目返回403禁止发布/放置/删除,rest,sap,s4sdk,Rest,Sap,S4sdk,我使用创建了一个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

我使用创建了一个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 TOME原型进行REST开发?

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

<!-- 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>
-->

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

<!-- 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>
-->

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

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

有关更多信息,您可以咨询:

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

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

有关更多信息,您可以咨询:

在SAP云平台上部署应用程序时,我认为这个答案不是一个好的建议。云平台在两种环境中都使用会话cookie:Neo、CloudFoundry。尽管后者基于Json Web令牌,但AppRouter是一个有状态的服务,具有各自的to会话,因此,必须提供CSRF保护。相反,应该通过web.xml中的附加配置来保护cookie:。此外,在CloudFoundry环境中,当存在批准者时,您可以取消对其的注释,因为批准者已经对客户端执行CSRF保护。对于后端微服务,签名JWT用于身份验证和授权。因此,没有必要对支持的微服务进行额外的CSRF保护。我认为在SAP云平台上部署应用程序时,这个答案不是一个好的建议。云平台在两种环境中都使用会话cookie:Neo、CloudFoundry。尽管后者基于Json Web令牌,但AppRouter是一个有状态的服务,具有各自的to会话,因此,必须提供CSRF保护。相反,应该通过web.xml中的附加配置来保护cookie:。此外,在CloudFoundry环境中,当存在批准者时,您可以取消对其的注释,因为批准者已经对客户端执行CSRF保护。对于后端微服务,签名JWT用于身份验证和授权。因此,不需要对支持的微服务进行额外的CSRF保护。我开发了该应用程序,并尝试在postman中进行测试。首先,我使用GET请求获取csrf令牌,并在POST请求中使用生成的令牌。但它给出了一个错误**405方法不允许**。你能帮帮我吗?你介意为这个问题提出一个新问题吗?也请分享你的代码和你正在做的详细描述。我创建了一个新问题。请点击链接。我开发了应用程序,并试图在postman中进行测试。首先,我使用GET请求获取csrf令牌,并在POST请求中使用生成的令牌。但它给出了一个错误**405方法不允许**。你能帮帮我吗?你介意为这个问题提出一个新问题吗?也请分享你的代码和你正在做的详细描述。我创建了一个新问题。请点击链接。如果提供的答案有帮助,您介意接受吗?非常感谢。如果提供的答案有帮助,您介意接受吗?非常感谢。