Как установить арендатора в заголовок посредника с помощью WSO2 API Manager
У меня есть API, который требует клиента в качестве заголовка.
Если я создаю пользовательскую последовательность:
<sequence name="WSO2AM--Ext--In">
<header
name="X-Tenant-Id"
scope="transport"
action="set"
expression="???????????????????"
/>
</sequence>
есть ли выражение, которое я могу использовать для достижения этого? Или я должен прибегнуть к созданию медиатора per-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);
но я не знаю, как получить доступ к этим свойствам в пользовательская последовательность, если это возможно.
2 ответов
после проверки вывода отладки из ApiManager я заметил, что пользовательские последовательности выполняются сразу после обработчиков. К счастью, класс OAuthAuthenticator (используемый APIAuthenticationHandler) устанавливает некоторые удобные свойства, такие как END_USER_NAME
и APPLICATION_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>
Я не смог найти документацию для свойства, кроме исходного кода и это другой вопрос
поскольку код предполагает, что они установлены в synapse MessageContext. Эти свойства можно получить с помощью следующих выражений.
get-property ('арендатор.информация.домен')
get-property ('арендатор.информация.id')
спасибо
выберите tishan