Bindung der CXF-Client-Quell-IP-Adresse

8

Ich habe einen CXF-Client, der eine Verbindung zu einem Web-Service herstellt. Dieser Client wird auf einem Computer installiert, der zwei IP-Adressen im selben Netzwerk hat (z. B. 172.16.1.101 und 172.16.1.102).

Wie kann ich den CXF-Client so konfigurieren, dass er eine bestimmte Quell-IP-Adresse verwendet, sodass der Server sieht, dass die Anforderungen von dieser bestimmten IP-Adresse kommen und nicht von der anderen?

Wenn ich Zugriff auf den Socket hätte, würde ich etwas tun wie:

%Vor%

Ist es möglich, die von CXF erstellten Sockets zu konfigurieren, damit ich die Quell-IP-Adresse angeben kann?

BEARBEITEN: Ich muss die Quell-IP-Adresse angeben, da zwischen dem Client und dem Webserver eine Firewall mit Regeln für eine der IP-Adressen existiert (Verbindungen, die von der anderen IP-Adresse kommen, sind blockiert).

    
user2518618 31.07.2016, 23:39
quelle

3 Antworten

1

Eine benutzerdefinierte URLStreamHandlerFactory funktioniert.

Beispiel:

%Vor%

Für HTTPS kann auch eine benutzerdefinierte SSLSocketFactory

verwendet werden %Vor%     
heli 05.04.2017, 09:00
quelle
5

Der CXF-Client verwendet java.net.URLConnection , um eine Verbindung zu einem Service herzustellen. Die URLConnection kann so konfiguriert werden, dass auf diese Weise eine lokale IP-Adresse ausgewählt wird (siehe Wie kann ich die lokale Adresse in einer java.net.URLConnection angeben? )

%Vor%

Ich habe den Code der Artefakte cxf-rt-rs-client und cxf-rt-transports-http untersucht, um zu sehen, wie CXF die Verbindung erstellt. In ProxyFactory ist der Code zum Erstellen des Proxy -Objekts, das für UrlConnection

benötigt wird %Vor%

Wie Sie sehen können, gibt es keine Möglichkeit, die IP-Adresse zu konfigurieren, daher befürchte ich, dass die Antwort auf die Frage lautet. Sie können die Quell-IP-Adresse nicht mit CXF

konfigurieren

Aber ich denke, es wäre nicht schwierig, den Quellcode zu ändern, um die Quell-IP-Adresse zu setzen

HTTPClientPolicy

Fügen Sie den folgenden Code zu org.apache.cxf.transports.http.configuration.HTTPClientPolicy at cxf-rt-transports-http

hinzu %Vor%

ProxyFactory

Ändern Sie den folgenden Code in org.apache.cxf.transport.http.ProxyFactory at cxf-rt-transports-http

%Vor%

Verwendung

%Vor%     
pedrofb 03.08.2016 07:56
quelle
0

Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstanden habe, aber ich glaube nicht, dass Sie eine IP-Adresse auf dem Client festlegen müssen, damit der Server

lesen kann %Vor%

Fügen Sie diesen Code dem Server hinzu und er kann tatsächlich IP von der Anfrage finden und Sie können einen Vergleich auf dem Server für die IP durchführen. Lass es mich wissen, wenn du das suchst.

Bearbeiten: -----

Nun, mein Verständnis ist Firewall sieht nicht die IP, die in Header oder Payload in einer Nachricht kommt. Es prüft die IP des Ursprungsservers.

Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, wenn Sie Ihren Client auf diesem Server bereitstellen, für den eine Firewall-Regel hinzugefügt wurde, und einen Anruf beim Server machen, gibt es keinen Grund, dass er nicht funktionieren sollte.

Lassen Sie mich wissen, welche Art von Fehler Sie bekommen, sagen Sie einen Stack-Trace oder etwas und wir können sehen, was passiert.

    
Aravind R 01.08.2016 00:11
quelle

Tags und Links