SAP Commerce Cloud OCC API UnknownResourceError 错误

99 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

错误消息:

{
    "errors": [
        {
            "message": "There is no resource for path /occ/v2/powertools/xxx/",
            "type": "UnknownResourceError"
        }
    ]
}

可以使用 @SecurePortalUnauthenticatedAccess 绕过 Authorization check.

这个注解的帮助文档在 SAP 官网 上能找到。

Commerce Cloud 引入了一个名为 SecurePortalUnauthenticatedAccess 的注释来保持 OCC 端点列表的公开。 还可以将注释添加到您认为应该公开访问的端点。

OCC 不使用会话。 这意味着可以(并且应该)忽略 JSESSIONID cookie。 为了从特定用户访问资源,需要遵循下面描述的 URL 约定:

https://localhost:9002/rest/v2/{baseSiteID}/users/{userID}/...

合法的 user id:

  • anonymous Anonymous user.

  • ${uid}:ID of the registered user.

例子:GET https://localhost:9002/rest/v2/wsTest/users/username@emai.com/addresses

缓存位于一个或多个 Web 服务器(也称为原始服务器)和一个或多个客户端之间,并监视请求的到来,保存响应的副本,例如 HTML 页面、图像和文件。 然后,如果对同一 URL 发出另一个请求,它可以使用收集到的响应之一,而不是再次向源服务器请求它。 下面描述了如何在 OCC 中使用缓存。 它提供了有关客户端缓存和服务器端缓存的详细信息。

webservicescommons 扩展定义了@CacheControl 注释,可用于生成 Cache-Control Header 作为响应。 如果要为特定方法或整个控制器启用客户端缓存,只需使用 @CacheControl 对其进行注释并指定适当的指令。可以在 ProductsController.java 类中注意到注释用法示例:

@RequestMapping(value = "/{productCode}", method = RequestMethod.GET)
    @CacheControl(directive = CacheControlDirective.PRIVATE, maxAge = 120)
    @ResponseBody
    public ProductWsDTO getProductByCode(@PathVariable final String productCode,
            @RequestParam(defaultValue = DEFAULT_FIELD_SET) final String fields)
    {
     ...
    }

注意:由于 Cache-Control 注解仅适用于 GET 和 HEAD 方法,因此不会影响任何其他请求方法。

仅当将 CacheControlHandlerInterceptor 添加到 mvc 拦截器时,@CacheControl 注释才有效。

<mvc:interceptors>
        <bean class="de.hybris.platform.webservicescommons.interceptors.CacheControlHandlerInterceptor"/>
    </mvc:interceptors>

Spring缓存配置可以在以下文件中找到:ycommercewebservices/web/webroot/WEB-INF/config/cache-config-spring.xml。

必须启用缓存功能。 可以使用 <cache:annotation-driven> 元素来完成。 此元素还允许定义将用于缓存的默认密钥生成器和缓存管理器。