Как установить арендатора в заголовок посредника с помощью 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