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?
Haben Sie mit 'curl' oder' soapui' getestet, indem Sie den Header manuell übergeben und prüfen, ob OSB ihn sehen kann? –
@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. –
Haben Sie "Alle Header" auf dem Proxy festgelegt? –