2012-05-26 13 views
8

मैं क्रॉस डोमेन http अनुरोध (allowOrigins = *) को अनुमति देने के लिए अपने जेटी सर्वर को कॉन्फ़िगर करता हूं और क्रॉस डोमेन प्रमाणीकरण (अनुमति प्रमाणपत्र = सत्य) को अपने क्रॉसऑरिगिनफ़िल्टर का उपयोग करने की अनुमति देता हूं। प्रमाणीकरण आवश्यकता के बिना क्रॉस डोमेन http अनुरोध ठीक काम करते हैं। अब जब http कॉल की बात आती है जिसके लिए प्रमाणीकरण की आवश्यकता होती है तो यह JQuery का उपयोग करके काम नहीं करता है। मैं निम्नलिखित कोड का उपयोग करें और इस उदाहरण का पालन किया: http://www.aswinanand.com/2009/01/http-basic-authentication-using-ajax/jquery cross डोमेन प्रमाणीकरण

function login(username, password) { 
$.ajax({ 
    type: "GET", 
    contentType: "application/json", 
    dataType: "json", 
    url: url, 
    beforeSend: function(xhr) { 
     var base64 = Base64.encode(username + ":" + password); 
     xhr.setRequestHeader("Authorization", "Basic " + base64); 
     xhr.withCredentials = true; 
    }, 
    error: function(data){ 
     alert("error"); 
    }, 
    success: function(data){ 
     alert("success"); 
    } 
}); 

HTTPFox मैं सर्वर के लिए निम्न अनुरोध दिखाई में:

OPTIONS /login HTTP/1.1 
... 
Access-Control-Request-Method GET 
Access-Control-Request-Headers authorization,content-type 

सर्वर एक

HTTP/1.1 204 No Content 
... 
Allow OPTIONS,GET,HEAD 

मैं भी साथ प्रतिक्रिया नीचे दिए गए विकल्पों का उपयोग किया, जो कोई फर्क नहीं पड़ता है।

$.ajax({ 
    ... 
    username: username, 
    password: password, 
    ... 
} 

त्रुटि फ़ंक्शन हमेशा आग लगती है। किसी को भी पता है कि समस्या क्या हो सकती है?

+0

आप अपनी प्रतिक्रिया हेडर में इस दिखाई दे रही है को शामिल करना चाहिए 'पहुंच-नियंत्रण -Allow-मूल: * '? रास्ते से महान सवाल! StackOverflow में आपका स्वागत है! – jmort253

+0

मुझे लगता है कि यदि आप इस मुद्दे से संबंधित किसी भी स्टैकट्रैक को भी दिखा सकते हैं तो यह सहायक होगा। – jmort253

+0

ठीक है, कृपया यह देखने के लिए जांचें कि क्या हेडर आपकी प्रतिक्रिया में शामिल है या नहीं।यदि नहीं, तो यह संभव है कि सुरक्षा प्रतिक्रिया शीर्षकों को ओवरराइड कर रही हो। आगे डीबग करने के लिए और अधिक लॉग देखने की आवश्यकता है। सौभाग्य! :) – jmort253

उत्तर

5

के रूप में डिफ़ॉल्ट हेडर की अनुमति

एक्स-अनुरोधित-साथ, सामग्री प्रकार, स्वीकार कर रहे हैं, उत्पत्ति

मैं

डीबग [2012-05-27 17:04 लॉग फ़ाइल के माध्यम से हेडर

प्राधिकरण, सामग्री प्रकार

इस मिले जोड़ने के लिए किया था : 02,468] org.eclipse.jetty.servlets.CrossOriginFilter: शीर्षलेख [प्रमाणीकरण, सामग्री-प्रकार] अनुमत शीर्षकों में से नहीं हैं [एक्स-अनुरोधित, सामग्री-प्रकार, स्वीकार्य, उत्पत्ति]

सभी संकेतों के लिए धन्यवाद!

3

आपके द्वारा सेट किए गए प्रतिक्रिया शीर्षलेख - जब सुरक्षा सक्षम नहीं होती है 00 ठीक काम करता है, जैसा आपने प्रमाणित किया है। हालांकि, जब सुरक्षा सक्षम होती है, तो आपके क्रॉस-डोमेन अनुरोध विफल हो जाते हैं।

यह संभवतः प्रतिक्रिया उत्पन्न करने के लिए सुरक्षा फ़िल्टर द्वारा सेट किए गए अतिरिक्त फ़िल्टर और अतिरिक्त प्रतिक्रिया शीर्षकों के कारण होने की संभावना है।

इस समस्या को हल करने के लिए, उच्च स्तरीय समाधान यह है कि आपको अपने प्रतिक्रिया शीर्षकों को सेट करना होगा, जब सुरक्षा फ़िल्टर इसके प्रतिक्रिया शीर्षलेख सेट करता है और/या उन्हें क्लाइंट को करता है।

आप जेटी का भी उपयोग कर रहे हैं; इसलिए, आप यह सुनिश्चित करने के लिए Jetty Cross Origin Filter का उपयोग कर सकते हैं कि प्रतिक्रिया शीर्षलेख फ़िल्टर श्रृंखला में सेट किए गए हैं, ताकि उन्हें सेट करने की आवश्यकता हो:

यहां पैरामीटर की एक सूची है जिसे आप वेब में फ़िल्टर कॉन्फ़िगरेशन में पास कर सकते हैं .xml:

  • allowedOrigins, एक अल्पविराम मूल कि संसाधनों का उपयोग करने की अनुमति है की सूची अलग कर दिया। डिफ़ॉल्ट मान * है, जिसका अर्थ है सभी उत्पत्ति

  • अनुमति मोड, HTTP विधियों की एक अल्पविराम से अलग सूची जो संसाधनों तक पहुंचने के दौरान उपयोग की जाने वाली अनुमति है। डिफ़ॉल्ट मान प्राप्त होता है, पोस्ट

  • अनुमति हैडर, HTTP शीर्षलेखों की एक अल्पविराम से अलग सूची जो संसाधनों तक पहुंचने पर निर्दिष्ट होने की अनुमति है। डिफ़ॉल्ट मान एक्स-अनुरोध किया गया है-

  • प्रीफलाइटमैक्सएज, प्रीफलाइट अनुरोधों के सेकंड की संख्या क्लाइंट द्वारा कैश की जा सकती है। डिफ़ॉल्ट मान 1800 सेकेंड है, या 30 मिनट

  • अनुमति प्रमाण पत्र, एक बूलियन इंगित करता है कि संसाधन प्रमाण-पत्रों के साथ अनुरोधों की अनुमति देता है या नहीं।डिफ़ॉल्ट मान असत्य

डिफ़ॉल्ट रूप से है, की अनुमति मूल प्रतिक्रिया हेडर * के लिए सेट है, जिसका मतलब है कि डिफ़ॉल्ट रूप से, किसी भी अनुरोध किसी भी डोमेन से बनाया जा सकता है। फ़िल्टर के लिए

web.xml प्रविष्टि:: आप यह सोचते हैं आप सभी डोमेन का प्रत्येक अनुरोध मान्य होने के लिए नहीं करना चाहते हैं, इस संशोधित करने के लिए केवल डोमेन है कि आप श्वेत सूची में डालने का इरादा अनुमति देने के लिए सुनिश्चित हो की आवश्यकता होगी

0

सोप सामान के लिए, अनुमति हेडर भी messagetype, soapaction

खबरदार है कि कोई वाइल्डकार्ड अनुमति हेडर कॉन्फ़िगर करने के लिए अनुमति दी है ...