如何使用WSO2 API Manager将租户设置为中介头

我有一个需要租户作为标题的API。

如果我按顺序创建自定义:

<sequence name="WSO2AM--Ext--In">
    <header
       name="X-Tenant-Id"
       scope="transport"
       action="set"
       expression="???????????????????"
    />
</sequence>

有没有一种表达方式可以用来实现这一点? 或者我应该采用创建一个API调解器来设置它?

PS:看看WSO2源代码(CarbonTenantInfoConfigurator.java),我发现这个片段可以作为提示有用:

PrivilegedCarbonContext cc = PrivilegedCarbonContext.getThreadLocalCarbonContext();
String tenantDomain = cc.getTenantDomain();
int tenantId = cc.getTenantId();
messageContext.setProperty("tenant.info.domain", tenantDomain);
messageContext.setProperty("tenant.info.id", tenantId);

但如果可能的话,我不知道如何访问自定义序列中的这些属性。


在检查了ApiManager的调试输出之后,我注意到自定义序列正在处理程序后执行。 幸运的是,OAuthAuthenticator类(由APIAuthenticationHandler使用)设置了一些便利的属性,如END_USER_NAMEAPPLICATION_NAME

END_USER_NAME包含调用者的姓名和租户(user@tenant.com)。

这个自定义序列为我工作:

<sequence name="add_service_header" trace="enable" statistics="enable" xmlns="http://ws.apache.org/ns/synapse">
    <log/>
    <property name="tenant" expression="fn:substring-after(get-property('END_USER_NAME'), '@')" />
    <header name="X-Tenant" scope="transport" expression="get-property('tenant')"/>
    <header name="X-AppName" scope="transport" expression="get-property('APPLICATION_NAME')"/>
</sequence>

除了源代码和其他问题,我找不到其他文档


如代码所示,这些设置为突触MessageContext。 您可以使用以下表达式检索这些属性。

获得属性(“tenant.info.domain”)

获得属性(“tenant.info.id”)

谢谢

Tishan

链接地址: http://www.djcxy.com/p/28405.html

上一篇: How to set tenant to header in mediator with WSO2 API Manager

下一篇: How are Python modules (which are shared libraries) imported without a .py file?