2016-04-29 19 views
1

Wir haben kürzlich Apache Load Balancer in unserer Domäne konfiguriert, über die HTTP-Anforderungen ausgeglichen und an verschiedene OSB-Webdienste weitergeleitet werden. Die Apache LBs sind mit ProxyPreserveHost On konfiguriert, die die Aufgabe ausführt, die IP-Adresse des Clients in einen neuen Header X-Forwarded-For zu schreiben.Oracle Service Bus 11g - So konfigurieren Sie den X-Forwarded-For-Header der Anforderung

Unsere OSB-Webdienste versuchen dann, Clientanfragen basierend auf der IP-Adresse des Clients sowie dem von ihnen angegebenen Benutzernamen/Passwort zu authentifizieren. Das Problem ist, dass, wenn die OSB-Flüsse eine neue Anfrage erhalten, der Header X-Forwarded-For nirgendwo zu sehen ist! Mit Tracing eingeschaltet wird, fordern Sie wie folgt aussehen:

<con:transport> 
    <con:uri>/ws/service/interface</con:uri> 
    <con:mode>request-response</con:mode> 
    <con:qualityOfService>best-effort</con:qualityOfService> 
    <con:request xsi:type="http:HttpRequestMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <tran:headers xsi:type="http:HttpRequestHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports"> 
     <http:Accept-Encoding>gzip,deflate</http:Accept-Encoding> 
     <http:Connection>Keep-Alive</http:Connection> 
     <http:Content-Length>1285</http:Content-Length> 
     <http:Content-Type>text/xml;charset=UTF-8</http:Content-Type> 
     <http:Host>www.a.service.com</http:Host> 
     <http:SOAPAction>""</http:SOAPAction> 
     <http:User-Agent>Apache-HttpClient/4.1.1 (java 1.5)</http:User-Agent> 
     </tran:headers> 
     <tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">UTF-8</tran:encoding> 
     <http:client-host>www.a.service.com</http:client-host> 
     <http:client-address>xx.xxx.x.xxx</http:client-address> 
     <http:http-method>POST</http:http-method> 
    </con:request> 
    <con:response xsi:type="http:HttpResponseMetaData" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <tran:headers xsi:type="http:HttpResponseHeaders" xmlns:tran="http://www.bea.com/wli/sb/transports"> 
     <http:Content-Type>text/xml</http:Content-Type> 
     </tran:headers> 
     <tran:response-code xmlns:tran="http://www.bea.com/wli/sb/transports">0</tran:response-code> 
    </con:response> 
    </con:transport> 

Die client-host | client-address Werte sind, dass der Apache LB und wir erwarten, dass die Quell-IP-Adresse des Clients unter trans:headers in einem Benutzerkopfzeile angezeigt werden - etwa so:

<tran:user-header name="X-Forwarded-For" value="yy.yy.yyy.yyy"/>

ich diesen Link gelesen haben: http://www.javamonamour.org/2014/07/osb-and-load-balancer-source-ip.html aber ich bin nicht sicher, was genau wir tun müssen. Ich habe eine Verbindung zum Admin-Server unter Verwendung von jconsole hergestellt und den WebServerMBean 'ClientIpHeader' (which is currently empty) but it is read-only and there is no setter for it. Any ideas what I need to do exactly in Weblogic OSB in order to retrieve X-Forwarded-For'-Header aus Benutzeranforderungen gefunden?

+0

Haben Sie mit 'curl' oder' soapui' getestet, indem Sie den Header manuell übergeben und prüfen, ob OSB ihn sehen kann? –

+0

@TrentBartlem, Ich habe Ihren Vorschlag versucht, aber immer noch, der hinzugefügte Header erscheint nicht im Ablaufprotokoll des OSB-Flusses. Für meinen Test habe ich eine neue Soap-UI-Anfrage erstellt und in der Kopfzeile "X-Forwarded-For" mit dem Wert "192.168.1.1" hinzugefügt, aber sie wurde nicht im Trace-Log des OSB nach dem direkten Senden der Anfrage angezeigt an den betreffenden OSB-Web-Service. –

+1

Haben Sie "Alle Header" auf dem Proxy festgelegt? –

Antwort

1

Sofern nicht explizit festgelegt, analysiert OSB eingehende Transportheader nicht. Es gibt eine Option "Alle Header abrufen" auf dem Proxy selbst; Wenn Sie dieses Kontrollkästchen aktivieren, können Sie innerhalb des Proxys darauf zugreifen.