2014-06-24 7 views
13

मैं बिल्ला CORS फिल्टर सक्षम करना चाहते हैं, मैं web.xml को यह कहा:बिलाव CORS फिल्टर

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

लेकिन यह काम नहीं करता। मैं पूर्वनिर्धारित फ़िल्टर के साथ करने की कोशिश की:

<filter> 
    <filter-name>SimpleCORSFilter</filter-name> 
    <filter-class>com.common.SimpleCORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SimpleCORSFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
इस वर्ग के साथ

:

public class SimpleCORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
     chain.doFilter(req, res); 
    } 
} 

और यह अच्छी तरह से, काम करता है आप मुझे बता सकते हैं क्यों? मुझे नहीं पता कि यह महत्वपूर्ण है लेकिन मैं स्प्रिंग फ्रेमवर्क का उपयोग कर रहा हूं।

+0

आपने 'कॉर्सफिल्टर' का परीक्षण कैसे किया? AJAX अनुरोध के साथ या बस एक साधारण प्राप्त करने के साथ? – cy3er

+0

दोनों, लेकिन फ़ायरबग एक्सेस-कंट्रोल हेडर नहीं दिखाता – Tobia

+0

क्या आप SimpleCORSFilter को सेट अप करने का एक संपूर्ण उदाहरण प्रदान कर सकते हैं? आयात क्या हैं? कक्षा कहाँ रहते हैं? मैं कक्षा को टोमकैट में जोड़ना चाहता हूं और मुझे यकीन नहीं है कि कैसे। –

उत्तर

30

फ़िल्टर org.apache.catalina.filters.CorsFilter अनुरोध में पहले शीर्षलेख ढूंढें: Origin। यदि यह हेडर मौजूद नहीं है, तो फ़िल्टर प्रतिक्रिया में कोई शीर्षलेख नहीं जोड़ता है। शायद उस कारण से काम नहीं करता है।

इसके अतिरिक्त, POST अनुरोध में, शीर्षलेख Content-Type देखें। कुछ अन्य तरीकों से ऐसा ही होता है। क्या आप इस फ़िल्टर के code देखना चाहते हैं। एक और तरीका में, वहाँ एक flowchart है:

CORS Flow Chart

+1

बहुत अच्छा फ्लोचार्ट, धन्यवाद – Tobia

+2

यह मेरे लिए मदद नहीं करता है। मैंने मूल के लिए उत्पत्ति http://www.stackoverflow.com को जोड़ा और टॉमकैट हेडर वापस नहीं लौटाता – Dejell

+0

@ टोबिया फ्लोचार्ट टॉमकैट डॉक्स द्वारा प्रदान किया जाता है – Pere

8

मैं एक ऐसी ही समस्या हो और मैं कुछ है कि बिल्ला डॉक tomcat-doc-CORSFilter मैं फिल्टर का उपयोग करें और के रूप में नीचे init-परम पर मेरे लिए काम किया पाया:

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>*</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.support.credentials</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

उम्मीद है कि यह मदद करता है!

0

यूडिटर के साथ मेरे मामले में, X-Requested-WithX_Requested_With होना चाहिए।

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