2016-07-20 20 views
1

ich für mein Webservice-Client unter Code verwenden:Wie setze ich https-Proxy in CXF-Client?

HelloService hello = new HelloService(); 
HelloPortType helloPort = cliente.getHelloPort(); 
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloPort); 
HTTPConduit http = (HTTPConduit) client.getConduit(); 
http.getClient().setProxyServer("proxy"); 
http.getClient().setProxyServerPort(8080); 
http.getProxyAuthorization().setUserName("user proxy"); 
http.getProxyAuthorization().setPassword("password proxy"); 

Aber das Ende URL meiner Webservice ist eine HTTPS-URL. Dieser Code scheint nur für http URL zu funktionieren. Gibt es eine Möglichkeit, den https-Proxy für den cxf-Client einzurichten?

Antwort

1

Ich habe in der Dokumentation nicht die Art und Weise gesehen https dieses

Versuchen zu konfigurieren

http.getClient().setProxyServerType (ProxyServerType.SOCKS) 

Da der HTTP-Proxy (Standard cxf Wert) nur verwendet werden, können HTTP-Datenverkehr (siehe http://www.jguru.com/faq/view.jsp?EID=227532) zu handhaben

Sie müssen auch wissen, ob der Proxy-Server, den Sie verwenden, dieses Protokoll unterstützt. Um HTTPS-Verbindungen über Proxy-Server zu erhalten, ist eine HTTP-CONNECT-Abfrage auf dem Proxy erforderlich, dann wird die Verbindung über den Proxy getunnelt, so dass die Zertifikatsüberprüfung wie üblich erfolgt, so als ob der Client direkt mit dem Endserver kommuniziert hätte.

Siehe HTTPS connections over proxy servers

Wenn SOCKS (Sie können auch einen Proxy wie Squid using SSL bump behing werden) nicht funktioniert, versuchen hTTPS-Proxy auf jdk Ebene mit den Systemeigenschaften zu konfigurieren. Siehe javadoc https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html

System.setProperty("https.proxyHost", host) 

    System.setProperty("https.proxyPort", port) //probably 443 

Set auch http.proxyUser und http.proxyPassword

+0

Danke für die Antwort. Wir können die Proxy-Einstellung auf Systemebene nicht verwenden, da es mehrere Verbindungen von demselben jvm gibt, und wir müssen den Proxy nur für 1 von ihnen verwenden. –

+0

Haben Sie überprüft, ob Ihr Proxy den https-Verkehr umgehen kann? – pedrofb

0

Ok, so Proxy war in Ordnung. Ich habe ein Verbindungszeitlimit in der Richtlinie und auch im Proxy festgelegt. Scheint, dass der HTTP-CLIENT die Eigenschaften nicht zusammengeführt hat, da unser Code ein neues Richtlinienobjekt zum Festlegen des Timeouts erstellt hat, anstatt in demselben zu setzen.

Das Problem wurde behoben und es funktionierte auch mit https URL.

+0

Können Sie Ihre Lösung aktualisieren? Ich habe ein ähnliches Problem, wenn ich versuche, mit htpps-Proxy-Server eine WSDL über HTPs zu verbinden. – Hector

+0

Ich musste ein Zertifikat für einen HTTPS-Proxy hinzufügen. –