2015-08-18 3 views
7

Ich habe eine API, die den Mandanten als Kopfzeile benötigt.So legen Sie den Mandanten im Mediator mit dem WSO2-API-Manager fest

Wenn ich eine benutzerdefinierte in-sequence erstellen:

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

Gibt es einen Ausdruck, den ich verwenden kann dies zu erreichen? Oder sollte ich einen API-Mediator erstellen, um ihn zu setzen?

PS: Blick auf WSO2 Quellcode (CarbonTenantInfoConfigurator.java), fand ich dieses Fragment, das als Hinweis nützlich sein könnte:

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

Aber ich weiß nicht, wie man diese Eigenschaften in den benutzerdefinierten zuzugreifen Reihenfolge, wenn möglich.

Antwort

3

Nachdem die Debug-Überprüfung Ausgabe von ApiManager, bemerkte ich, dass benutzerdefinierte Sequenzen direkt nach Handler ausgeführt werden. Glücklicherweise setzt die OAuthAuthenticator-Klasse (die von APIAuthenticationHandler verwendet wird) einige nützliche Eigenschaften wie END_USER_NAME und APPLICATION_NAME.

END_USER_NAME enthält den Namen und Mandanten des Anrufers ([email protected]).

Diese benutzerdefinierte Sequenz für mich gearbeitet:

<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> 

ich keine Dokumentation für die Eigenschaft andere als Quellcode und this other question

+0

Das ist genau das was ich gesucht habe und es funktioniert super. Vielen Dank! –

0

Wie der Code andeutet, werden diese auf synapse MessageContext gesetzt. Sie können diese Eigenschaften mithilfe der folgenden Ausdrücke abrufen.

get-property ('tenant.info.domain')

get-property ('tenant.info.id')

Dank

Tishan

+0

Ich habe versucht, das finden konnte. Habe auch 'get-property (tenant.info.domain)', '$ ctx: tenant.info.domain' und' $ axis2: tenant.info.domain' ohne Erfolg versucht. –

+0

Ich habe mit ESB 4.8.0 versucht und es funktioniert wie erwartet. Im Folgenden finden Sie das Synapse-Konfig-Segment, das zum Festlegen des HTTP-Headers verwendet wird.

Tishan

Verwandte Themen