2011-12-29 15 views
6

मेरे पास जावा वेबपैप है, जो टॉमकैट 6 में चल रहा है, जो दूरस्थ URL से आरएसएस फ़ीड लोड करता है।जावा प्रॉक्सी प्रमाणीकरण

मैं आरएसएस फ़ीड और मेरे लिए विभिन्न प्रारूपों को संभालने के लिए Rome का उपयोग करता हूं। कनेक्शन बात यह है कि तरह दिखाई देता है:

try{ 
    feedSource = new URL(rssObject.getAsset()); 
}catch(MalformedURLException mue){ 
    logger.error(...); 
    throw mue; 
} 

try{ 
    URLConnection connection = feedSource.openConnection(); 
    feed = new SyndFeedInput().build(new XmlReader(connection)); 
}catch(Exception){handle...} 

कोड ठीक काम करता है, इस नए ग्राहक हैं, जहां वे एक प्रॉक्सी का उपयोग पर छोड़कर।

आदेश प्रॉक्सी का उपयोग करने में, मैं http.proxyHost और proxyPort प्रणाली गुण सेट:

System.setProperty("http.proxyHost", proxyHost); 
System.setProperty("http.proxyPort", proxyPort); 
System.setProperty("https.proxyHost", proxyHost); 
System.setProperty("https.proxyPort", proxyPort); 

HTTP GET ठीक प्रॉक्सी लिए किया जाता है, लेकिन अब मैं एक HTTP 502 त्रुटि (खराब गेटवे मिलता है या कुछ समान)।

वायरसहार्क के साथ HTTP एक्सचेंज का विश्लेषण करते हुए, मैंने देखा कि प्रॉक्सी को प्रमाणीकरण की आवश्यकता है। यह एक HTTP 507 भेजता है। जावा किसी भी तरह प्रमाणित करने का प्रयास कर रहा है लेकिन यह गलत उपयोगकर्ता नाम और पासवर्ड का उपयोग करता है। ऐसा लगता है कि मेजबान नाम उपयोगकर्ता नाम के रूप में उपयोग किया जाता है, क्योंकि पासवर्ड के बारे में मुझे नहीं पता।

Authenticator.setDefault(new Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       logger.info(MessageFormat.format("Generating PasswordAuthentitcation for proxy authentication, using username={0} and password={1}.", username, password)); 
       return new PasswordAuthentication(username, password.toCharArray()); 
      } 
     }); 

अब मेरी समस्या यह है कि यह नजरअंदाज कर दिया है:

तो मैं एक उपयोगकर्ता नाम + पासवर्ड निर्दिष्ट करने के प्रमाणक विधि को लागू करने की कोशिश की। GetPassword प्रमाणीकरण विधि कभी नहीं कहा जाता है। मुझे लॉग फ़ाइल में लॉगिंग कथन नहीं दिखाई देता है और वायरशर्क का उपयोग करके मैं देख सकता हूं कि यह अभी भी होस्ट नाम का उपयोग उपयोगकर्ता नाम के रूप में करता है।

क्यों? ऐसा लगता है कि जावा किसी भी तरह से प्रमाणीकरणकर्ता से परामर्श किए बिना स्वयं प्रमाणित करने का प्रयास करता है।

प्रॉक्सी एक एमएस डिवाइस प्रतीत होता है जो प्रमाणीकरण के लिए एनटीएलएम का उपयोग करता है। क्या जावा में कुछ अंतर्निर्मित तंत्र इसे संभालने के लिए है? वह मशीन जिस पर ऐप चलता है वह Win Server 2008 R2 है।

उत्तर

12

हमने एनटीएलएम आधारित प्रॉक्सी पर प्रमाणीकरण के लिए यहां ऐसा किया।

प्रॉक्सी पर प्रमाणीकरण वास्तव में एक सामान्य HTTP मूल प्रमाणीकरण है।

हम निम्नलिखित विधि का इस्तेमाल किया:

protected URLConnection newURLConnection(URL pURL) throws IOException { 
    URLConnection urlConnection = super.newURLConnection(pURL); 

    String auth = new String(Base64.base64Encode(new String("username:password").getBytes())); 
    auth = "Basic " + auth; 
    urlConnection.setRequestProperty("Proxy-Connection","Keep-Alive"); 
    urlConnection.setRequestProperty("Proxy-Authorization",auth); 
    return urlConnection; 
} 

यही कारण है, एक साथ प्रॉक्सी JVM सेटिंग्स के साथ, चाल किया था।

http://en.wikipedia.org/wiki/Basic_access_authentication देखें।

+0

बहुत बहुत धन्यवाद। यह हमारे लिए भी काम करता है। –

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