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).
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? )
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
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
konfigurierenAber 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
ProxyFactory
Ändern Sie den folgenden Code in org.apache.cxf.transport.http.ProxyFactory
at cxf-rt-transports-http
Verwendung
%Vor%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.
Tags und Links java sockets cxf web-services