Tôi muốn định cấu hình máy chủ proxy cho ứng dụng khách Jersey của mình.
Tôi không muốn định cấu hình proxy cho toàn bộ ứng dụng (sử dụng đối số JVM như http.proxyHost) và Id'e không sử dụng máy khách Apache.
Tôi đọc here rằng có một tùy chọn để làm điều đó bằng cách cung cấp HttpUrlConnection qua HttpUrlConnectionFactory, nhưng tôi không thể tìm thấy bất kỳ ví dụ mã nào.
Có ai biết làm thế nào tôi có thể làm điều đó?
Cảm ơn!Định cấu hình proxy cho máy khách Jersey
Trả lời
Với sự giúp đỡ của Luca, tôi đã nhận nó làm:
Thực hiện HttpURLConnectionFactory, và ghi đè lên các phương pháp 'getHttpURLConnection', thực hiện của tôi là (nhờ Luca):
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 3128));
return new HttpURLConnection(url, proxy);
befo tái tạo lại ứng dụng khách Jersey, tạo một
URLConnectionClientHandler
mới và cung cấpHttpURLConnectionFactory
trong hàm tạo của nó. Sau đó, tạo một Máy khách mới và cung cấp cho ClientHandler của bạn trong trình tạo ứng dụng khách. Mã của tôi:
URLConnectionClientHandler urlConnectionClientHandler = new URLConnectionClientHandler(new MyHttpURLConnectionFactory());
_client = new Client(urlConnectionClientHandler);
Hy vọng rằng nhân giúp đỡ.
Hãy thử
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
conn = new URL(url).openConnection(proxy);
Tôi không chắc chắn cách thức, hiện tại tôi đang sử dụng 'Client.create (config)'. Không thể tìm thấy bất kỳ tùy chọn nào để sử dụng 'UrlConnection' khi tạo ứng dụng khách. – danieln
Trước hết tôi tạo ra lớp này
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;
}
};
}
}
sau đó tôi cũng tạo ra một lớp được gọi là 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;
}
}
sau đó sau khi tạo lớp này tôi đang kêu gọi các khách hàng như thế này
URLConnectionClientHandler cc = new URLConnectionClientHandler(new ConnectionFactory(webProxy.getWebserviceProxyHost(), webProxy.getWebserviceProxyPort()));
client = new Client(cc);
client.setConnectTimeout(2000000);
thay thế webProxy.getWeserviceHost bằng proxyHost và webProxy.getWebservi của bạn ceProxyPort() bằng cổng proxy.
Điều này phù hợp với tôi và nó cũng phù hợp với bạn. Lưu ý rằng tôi đang sử dụng Jersey 1.8 nhưng cũng nên hoạt động cho Jersey 2
cảm ơn, điều này đã làm việc cho tôi. – whoami
- 1. Khách hàng Jersey + đặt proxy
- 2. Thiết lập proxy cho máy khách HTTP
- 3. Cách định cấu hình cài đặt proxy cho Java?
- 4. tắt proxy web cho ứng dụng khách WCF?
- 5. Cấu hình máy khách WCF - địa chỉ cơ sở?
- 6. Phần cấu hình máy ASP.NET Cấu hình mặc định
- 7. Cách kiểm tra xem máy chủ proxy có được định cấu hình không?
- 8. Proxy máy khách CXF JAX-RS không duy trì cookie
- 9. Đặt lại git proxy thành cấu hình mặc định
- 10. Làm cách nào để đặt Proxy HTTP (WebProxy) trên proxy dịch vụ phía máy khách WCF?
- 11. Maven + Chắc chắn: cấu hình proxy
- 12. Định cấu hình HttpClient để sử dụng làm máy khách Restlet
- 13. Cách chỉ định thông tin đăng nhập Windows trong tệp cấu hình máy khách WCF
- 14. JGit cấu hình proxy trong mã
- 15. Máy chủ proxy HTTP Java
- 16. Phát hiện khách hàng bằng Máy chủ proxy qua PHP
- 17. Cấu hình xây dựng Android cho nhiều khách hàng
- 18. Cấu hình máy chủ MDM cho iPhone
- 19. Sử dụng máy khách SignalR thông qua proxy web
- 20. Tạo máy khách dịch vụ WCF với địa chỉ được chỉ định mà không chỉ định tên cấu hình
- 21. Khách hàng Jersey trên Android - NullPointerException
- 22. Cách định cấu hình Jersey bằng Spring chỉ sử dụng chú thích
- 23. Jersey Multipart Khách hàng Tải lên
- 24. Làm cách nào để chỉ định tệp cấu hình thay thế cho ứng dụng khách WCF?
- 25. Cách cấu trúc kho git cho dự án máy khách-khách
- 26. Phụ thuộc khách hàng của Jersey
- 27. Mặc định cho cấu hình chạy Eclipse
- 28. Định cấu hình tên tệp cho PHPUnit
- 29. Định cấu hình Eclipse cho MinGW
- 30. Cách định cấu hình log4j.properties cho SpringJUnit4ClassRunner?
Lưu ý rằng điều này chỉ hoạt động với Java 6 trở đi - hàm tạo HttpURLConnection có Proxy không sẵn dùng trong Java 5. –