我有一个 API,需要租户作为标头。
如果我创建一个自定义顺序:
<sequence name="WSO2AM--Ext--In">
<header
name="X-Tenant-Id"
scope="transport"
action="set"
expression="???????????????????"
/>
</sequence>
有没有一种表达方式可以用来实现这一目标?或者我应该创建一个 per-API 中介来设置它?
附:
查看 WSO2 源代码(CarbonTenantInfoConfigurator.java https://svn.wso2.org/repos/wso2/carbon/platform/trunk/components/mediation-initializer/org.wso2.carbon.mediation.initializer/src/main/java/org/wso2/carbon/mediation/initializer/handler/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_NAME
and APPLICATION_NAME
.
END_USER_NAME
包含调用者的姓名和租户([电子邮件受保护] /cdn-cgi/l/email-protection).
这个自定义序列对我有用:
<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>
除了源代码之外,我找不到该属性的文档,并且这另一个问题 https://stackoverflow.com/questions/23755852/add-header-with-username-into-request-to-backend-in-wso2-apimanager
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)