Chciałbym skonfigurować serwer proxy dla mojego klienta z Jersey.
Nie chcę skonfigurować serwera proxy dla całej aplikacji (używając argumentów JVM, takich jak http.proxyHost), i raczej nie używam klienta Apache.
Czytam here, że istnieje opcja, aby to zrobić, zapewniając HttpUrlConnection przez HttpUrlConnectionFactory, ale nie mogłem znaleźć żadnego przykładowego kodu.
Czy ktoś wie, jak mogę to zrobić?
Dzięki!Konfiguracja serwera proxy dla klienta Jersey
Odpowiedz
z pomocą Luca, mam to zrobić:
Wdrożenie HttpURLConnectionFactory i zastąpić metodę 'getHttpURLConnection', moja implementacja jest (dzięki Luca):
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 3128));
return new HttpURLConnection(url, proxy);
Befo ponownie utworzyć klienta Jersey, utworzyć nowy
URLConnectionClientHandler
i podać swójHttpURLConnectionFactory
w swoim konstruktorze. Następnie utwórz nowego klienta i podaj swój ClientHandler w konstruktorze klienta. Mój kod:
URLConnectionClientHandler urlConnectionClientHandler = new URLConnectionClientHandler(new MyHttpURLConnectionFactory());
_client = new Client(urlConnectionClientHandler);
nadzieję, że to pomaga.
Spróbuj
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
conn = new URL(url).openConnection(proxy);
Nie jestem pewien jak, aktualnie używam 'Client.create (config)'. Nie można znaleźć żadnej opcji użycia 'UrlConnection' podczas tworzenia klienta. – danieln
Przede wszystkim stworzyłem tę klasę
import com.sun.jersey.client.urlconnection.HttpURLConnectionFactory;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
/**
*
* @author Aimable
*/
public class ConnectionFactory implements HttpURLConnectionFactory {
Proxy proxy;
String proxyHost;
Integer proxyPort;
SSLContext sslContext;
public ConnectionFactory() {
}
public ConnectionFactory(String proxyHost, Integer proxyPort) {
this.proxyHost = proxyHost;
this.proxyPort = proxyPort;
}
private void initializeProxy() {
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
}
@Override
public HttpURLConnection getHttpURLConnection(URL url) throws IOException {
initializeProxy();
HttpURLConnection con = (HttpURLConnection) url.openConnection(proxy);
if (con instanceof HttpsURLConnection) {
System.out.println("The valus is....");
HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection(proxy);
httpsCon.setHostnameVerifier(getHostnameVerifier());
httpsCon.setSSLSocketFactory(getSslContext().getSocketFactory());
return httpsCon;
} else {
return con;
}
}
public SSLContext getSslContext() {
try {
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{new SecureTrustManager()}, new SecureRandom());
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
} catch (KeyManagementException ex) {
Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
}
return sslContext;
}
private HostnameVerifier getHostnameVerifier() {
return new HostnameVerifier() {
@Override
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
return true;
}
};
}
}
potem też utworzyć inną klasę o nazwie SecureTrustManager
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
*
* @author Aimable
*/
public class SecureTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public boolean isClientTrusted(X509Certificate[] arg0) {
return true;
}
public boolean isServerTrusted(X509Certificate[] arg0) {
return true;
}
}
następnie po utworzeniu tej klasy Dzwonię na klienta jak ten
URLConnectionClientHandler cc = new URLConnectionClientHandler(new ConnectionFactory(webProxy.getWebserviceProxyHost(), webProxy.getWebserviceProxyPort()));
client = new Client(cc);
client.setConnectTimeout(2000000);
Zamień webProxy.getWeserviceHost na swój proxyHost i webProxy.getWebservi ceProxyPort() przez port proxy.
To zadziałało dla mnie i powinno działać również dla Ciebie. Zauważ, że używam oprogramowania Jersey 1.8, ale powinno również działać dla Jersey 2
dzięki, to działało dla mnie. – whoami
- 1. Korzystanie z serwera proxy publiczną klienta HTTP
- 2. Klient sieci Jersey + zestaw proxy
- 3. Maven + Surefire: konfiguracja proxy
- 4. Konfiguracja serwera CVS dla Eclipse
- 5. Atmosphere Jersey - Komunikaty serwera
- 6. Tworzenie klienta dla serwera Icecast
- 7. Status odpowiedzi klienta Jersey 204
- 8. konfiguracja klienta warunkowy dla projektu Gradle
- 9. Jak dodać proxy HTTP dla Jersey2 Klienta
- 10. Inicjalizacja proxy klienta WCF
- 11. Konfiguracja serwera DHCP IP dla Vagrant
- 12. Konfiguracja serwera HTTP Apache dla Eclipse
- 13. Najlepsza konfiguracja EC2 dla serwera redis
- 14. Ustawienie proxy serwera Firebase dla Androida
- 15. Wykryj błąd serwera proxy HTTP dla WebRequest
- 16. Uwierzytelnianie serwera proxy dla usługi WCF
- 17. JGit konfiguracja proxy w kodzie
- 18. Grails konfiguracja serwera Exchange
- 19. Używanie klienta SignalR przez serwer proxy sieciowej
- 20. Utwórz aplikację java serwera klienta
- 21. Minimalna konfiguracja dla odwrotnego proxy Apache w kontenerze Docker
- 22. Błąd serwera Jersey 2.0 i Moxy, ale brak dziennika serwera
- 23. Globalne ustawienia serwera proxy Node.js
- 24. Konfigurowanie serwera proxy Apache z uwierzytelnianiem
- 25. Konfiguracja serwera PC bluetooth android
- 26. HTTPS przy użyciu klienta sieci Jersey
- 27. Serwer proxy HTTP HTTP
- 28. Serwer Android gradle konfiguracja serwera
- 29. Pytanie klienta/serwera Pythona
- 30. konfiguracja proxy nie działa z kątowym CLI
Należy zauważyć, że działa to tylko w Javie 6 - konstruktor HttpURLConnection z Proxy nie jest dostępny w Javie 5. –