TenantAccessor.getCurrentTenant() 抛出 TenantNotAvailableException:无法获取当前租户:无可用请求
TenantAccessor.getCurrentTenant() throws TenantNotAvailableException: Failed to get current tenant: no request available
我在具有 xs2 库 OAuth 2.0 安全性的 SCP 中有一个 Spring 启动 2.0.1.RELEASE
应用程序 运行。如果我在 Postman 中创建一个访问令牌并直接调用我的@RestController(到达数据库),我会从 TenantAccessor.getCurrentTenant():
得到这个错误
com.sap.cloud.sdk.cloudplatform.tenant.exception.TenantNotAvailableException: Failed to get current tenant: no request available. This error may occur when trying to obtain the current tenant within tasks that are not triggered by a request, for example, while using a RequestContextExecutor. Note that, on SCP CF, a request is required to obtain tenant information from the JWT bearer in the "Authorization" header.
我不明白为什么我没有 "request available" 当我显然发送一个包含 Bearer 令牌的授权请求 header 直接到我的 @RestController
.
我有一个想法通过用 @RequestScope
注释 TenantIdentifierResolver
class(其中包含 TenantAccessor)来解决这个问题,但是这失败了,因为在初始化时找不到请求上下文应用程序 (entityManagerFactory
).
此消息表示缺少 RequestContext
. Such a RequestContext
is initialized using either a RequestContextServletFilter
or a RequestContextExecutor
。
您的 Spring 应用程序可能缺少 Web Servlet 过滤器。您可以尝试将以下 @ServletComponentScan
注释添加到您的应用程序吗?
@ServletComponentScan({"com.sap.cloud.sdk"})
...
@SpringBootApplication
public class Application extends SpringBootServletInitializer
{
...
}
在后台任务中,您可能必须使用 RequestContextExecutor
。
有关详细信息,请同时查看相关问题 here。
我在具有 xs2 库 OAuth 2.0 安全性的 SCP 中有一个 Spring 启动 2.0.1.RELEASE
应用程序 运行。如果我在 Postman 中创建一个访问令牌并直接调用我的@RestController(到达数据库),我会从 TenantAccessor.getCurrentTenant():
com.sap.cloud.sdk.cloudplatform.tenant.exception.TenantNotAvailableException: Failed to get current tenant: no request available. This error may occur when trying to obtain the current tenant within tasks that are not triggered by a request, for example, while using a RequestContextExecutor. Note that, on SCP CF, a request is required to obtain tenant information from the JWT bearer in the "Authorization" header.
我不明白为什么我没有 "request available" 当我显然发送一个包含 Bearer 令牌的授权请求 header 直接到我的 @RestController
.
我有一个想法通过用 @RequestScope
注释 TenantIdentifierResolver
class(其中包含 TenantAccessor)来解决这个问题,但是这失败了,因为在初始化时找不到请求上下文应用程序 (entityManagerFactory
).
此消息表示缺少 RequestContext
. Such a RequestContext
is initialized using either a RequestContextServletFilter
or a RequestContextExecutor
。
您的 Spring 应用程序可能缺少 Web Servlet 过滤器。您可以尝试将以下 @ServletComponentScan
注释添加到您的应用程序吗?
@ServletComponentScan({"com.sap.cloud.sdk"})
...
@SpringBootApplication
public class Application extends SpringBootServletInitializer
{
...
}
在后台任务中,您可能必须使用 RequestContextExecutor
。
有关详细信息,请同时查看相关问题 here。