2012-04-30 12 views
6

पर प्रॉक्सी कॉन्फ़िगर करें मैं अपने जर्सी क्लाइंट को प्रॉक्सी सर्वर कॉन्फ़िगर करना चाहता हूं।
मैं प्रॉक्सी को पूरे एप्लिकेशन में कॉन्फ़िगर नहीं करना चाहता हूं (http.proxyHost जैसे JVM तर्कों का उपयोग करके), और Id'e अपाचे क्लाइंट का उपयोग नहीं करते हैं।
मैंने here पढ़ा है कि HttpUrlConnection HttpUrlConnectionFactory के माध्यम से इसे करने का विकल्प है, लेकिन मुझे कोई कोड उदाहरण नहीं मिला।
क्या कोई जानता है कि मैं इसे कैसे कर सकता हूं?
धन्यवाद!जर्सी क्लाइंट

उत्तर

10
लुका की मदद से

प्रयास करें, मैं यह किया गया:

  1. HttpURLConnectionFactory लागू करें, और विधि 'getHttpURLConnection' ओवरराइड, मेरे कार्यान्वयन (लुका के लिए धन्यवाद) है:
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 3128)); return new HttpURLConnection(url, proxy);

  2. befo जर्सी क्लाइंट को तुरंत चालू करने के लिए, एक नया URLConnectionClientHandler बनाएं, और अपने कन्स्ट्रक्टर में अपना HttpURLConnectionFactory प्रदान करें। फिर एक नया ग्राहक बनाएं, और क्लाइंट कन्स्ट्रक्टर में अपने क्लाइंट हैंडलर प्रदान करें। मेरे कोड:
    URLConnectionClientHandler urlConnectionClientHandler = new URLConnectionClientHandler(new MyHttpURLConnectionFactory());
    _client = new Client(urlConnectionClientHandler);

आशा है कि की मदद।

+0

ध्यान दें कि यह केवल जावा 6 के साथ काम करता है - प्रॉक्सी के साथ HttpURLConnection कन्स्ट्रक्टर जावा 5 में उपलब्ध नहीं है। –

2

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); 
conn = new URL(url).openConnection(proxy); 
+5

के लिए भी काम करना चाहिए, मुझे यकीन नहीं है कि, वर्तमान में मैं 'Client.create (config)' का उपयोग कर रहा हूं। क्लाइंट बनाने के दौरान 'UrlConnection' का उपयोग करने के लिए कोई विकल्प नहीं मिला। – danieln

5

सबसे पहले मैं इस वर्ग

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; 
      } 
     }; 
    } 

} 

तो मैं भी अन्य वर्ग 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; 
    } 

} 

बनाएं जिसका नाम बनाया तो निर्माण इस वर्ग मैं इस

URLConnectionClientHandler cc = new URLConnectionClientHandler(new ConnectionFactory(webProxy.getWebserviceProxyHost(), webProxy.getWebserviceProxyPort())); 
    client = new Client(cc); 
    client.setConnectTimeout(2000000); 
तरह ग्राहक फोन कर रहा हूँ के बाद

वेबप्रोक्सी.getWeserviceHost को अपने proxyHost और webProxy.getWebservi द्वारा बदलें प्रॉक्सी पोर्ट द्वारा ceProxyPort()।

यह मेरे लिए काम करता है और यह आपके लिए भी काम करना चाहिए। ध्यान दें कि मैं जर्सी 1.8 का उपयोग कर रहा हूं लेकिन इसे जर्सी 2

+0

धन्यवाद, यह मेरे लिए काम करता है। – whoami

संबंधित मुद्दे