2011-11-28 17 views
25

मैंने जेटी के क्रॉस मूल फ़िल्टर को कॉन्फ़िगर किया है, लेकिन मुझे निम्न त्रुटि मिलती है। क्या किसी को पता है कि क्या गलत है और इसे कैसे ठीक किया जाए? त्रुटि संदेश नीचे मेरी ओवरराइड वर्णनकर्ता (यानी पूरक web.xml) हैजेटी क्रॉस उत्पत्ति फ़िल्टर

त्रुटि:

Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin. 

अवहेलना डिस्क्रिप्टर:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
<filter> 
    <filter-name>cross-origin</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> 
    <init-param> 
     <param-name>allowedOrigins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedMethods</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedHeaders</param-name> 
     <param-value>*</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <filter-pattern>/*</filter-pattern> 
</filter-mapping> 
</web-app> 

अनुरोध हेडर

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:Origin, Content-Type, Accept 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:8090 
Referer:http://localhost:8090/home 
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0 

रिस्पांस हैडर

Allow:POST,GET,OPTIONS,HEAD 
Content-Length:0 
Date:Wed, 30 Nov 2011 02:13:21 GMT 
Server:Jetty(7.5.4.v20111024) 
+0

आप वास्तविक अनुरोध/प्रतिक्रिया हेडर को दिखाने के लिए Wireshark जैसे किसी उपकरण का उपयोग कर सकते हैं विमर्श किया जा रहा है? इससे यह सत्यापित करने में मदद मिलेगी कि सही सीओआरएस हेडर भेजे जा रहे हैं या नहीं। – monsur

+0

@ मॉन्सूर: मैंने अनुरोध/प्रतिक्रिया शीर्षलेख विवरण जोड़ा है। प्रतिक्रिया शीर्षलेख में 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति शामिल नहीं है: * ' – Ari

+0

हम्म, सुनिश्चित नहीं है। क्या आप यह देखने के लिए लॉग जांच सकते हैं कि फ़िल्टर कुछ लॉगिंग कर रहा है या नहीं? फ़िल्टर में लॉगर सेट अप है: http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/CrossOriginFilter.html#77 – monsur

उत्तर

22

अलोहा,

मैं भी थोड़ी देर के लिए यह लड़ाई लड़ी, और पाया कि अंतिम नोड होने की जरूरत है:

<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

नहीं

<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <filter-pattern>/*</filter-pattern> 
</filter-mapping> 

एच मेरी मदद करने के लिए मैंने जो लिंक पाया है: wiki.eclipse.org/Jetty/Feature/Cross_Origin_Filter

मैंने अपनी वेब.एक्सएमएल फ़ाइल को अपडेट करने और जेटी सर्वर को पुनरारंभ करने के बाद, मैं jQuery AJAX कॉल का उपयोग कर क्रॉस डोमेन अनुरोध करने में सक्षम था।

रोब

+0

"फ़िल्टर-पैटर्न" मेरी योजना द्वारा मान्यता प्राप्त नहीं है, कोई विचार जहां इसे परिभाषित किया गया है? इसमें नहीं है: xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" \t xmlns = "http://java.sun.com/xml/ns/javaee" \t xsi: schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" \t संस्करण = "3.0" – perilandmishap

+1

जेटी में 9 'अनुमत हैडर' और 'अनुमत विधि', '*' काम नहीं करेगा। –

11

मैं जब GAE के लिए तैनात किए गए वेब ऐप्लिकेशन को crossdomain कॉल कर इस में भाग गया। आप की तरह अपने सर्वलेट (रों) प्रतिक्रियाओं का सुस्पष्ट हेडर जोड़ सकते हैं,:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException 
{ 
    res.addHeader("Access-Control-Allow-Origin", "*"); 
    ... 
} 

और यह भी सुनिश्चित करें कि आप की तरह अपने युद्ध की जड़ में एक crossdomain.xml नीति फ़ाइल है, बनाने:

<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd"> 
<allow-access-from domain="*"/> 
</cross-domain-policy> 

एचटीएच।

2

बस मेरे बहुत समय बर्बाद कर के बाद एक बग रिपोर्ट खोला:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384847

इसके अलावा तथ्य यह है कि पैरामीटर मूल्यों में वाइल्डकार्ड ज्यादातर समर्थित नहीं हैं के बारे में पता होना। (। यानी अनुमति हेडर)

4

मुझे (जेटी-संस्करण 8.1.5.v20120716) के लिए केवल 'web.xml' में इन पंक्तियों में मदद करता है:

<filter> 
    <filter-name>cross-origin</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> 
    <init-param> 
     <param-name>allowedOrigins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedMethods</param-name> 
     <param-value>GET,POST,DELETE,PUT,HEAD</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedHeaders</param-name> 
     <param-value>origin, content-type, accept</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

मैंने परिवर्तन लॉग स्तर डिबग करने के लिए और प्राप्त जानकारी (जैसे 'जेट, पोस्ट, डिलीट, पुट, हेड' और 'मूल, सामग्री-प्रकार, स्वीकार करें') जेटी कंसोल लॉग से। जैसे:

डीबग CrossOriginFilter: 359 - पद्धति को हटाना अनुमति तरीकों [मिलता है, पोस्ट, हटाएँ, PUT, प्रमुख] 19 में से एक है: 14: 28.413

डीबग CrossOriginFilter: 389 - हेडर [मूल, सामग्री प्रकार, स्वीकार] अनुमति हेडर [*]

तब मैं $ .ajax साथ परिणाम की जाँच की बीच नहीं हैं ({url: 'anotherHost', टाइप करें: 'हटाएं' ..})

4

मैं के साथ एक ही समस्या थी Jetty वेब सर्वर के भीतर ActiveMQ अजाक्स। मेरी समस्या यह थी कि अनुमत शीर्षलेख फ़ील्ड "*" के रूप में वाइल्डकार्ड स्वीकार नहीं कर रहा है।

सक्रिय एमक्यू अजाक्स को काम करने के लिए, मुझे अनुमति मोड में "विकल्प" विधि भी जोड़नी होगी।

web.xml से पार उत्पत्ति फिल्टर:

<filter> 
    <filter-name>cross-origin</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> 
    <init-param> 
     <param-name>allowedOrigins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedMethods</param-name> 
     <param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowedHeaders</param-name> 
     <param-value>origin, content-type, accept, authorization</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 
संबंधित मुद्दे