2016-01-27 17 views
6

मुझे वसंत बूट में सीओआरएस के साथ समस्या का सामना करना पड़ रहा है। मैं इसवसंत बूट और सीओआरएस

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addCorsMappings(CorsRegistry registry) { 
     registry.addMapping("/**"); 
    } 
} 

जो मुझे लगता है कि सभी शीर्ष लेख और अन्य सामग्री के लिए सक्षम बनाता है जैसे CORS कॉन्फ़िगर किया है।

इसे पाने के अनुरोध

$.get("someUrl, function(data, status){ 
    console.log(data[0].latitude); 
}); 

साथ उत्कृष्ट काम करता है लेकिन जब भी मैं इस

$.ajax({ 
     url: 'someUrl', 
     type: 'post', 
     dataType: 'json', 
     crossDomain: true, 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      console.log(data); 
     }, 
     data: object 
    }); 

मैं की तरह पोस्ट अनुरोध बनाने

OPTIONS XHR "someUrl" [HTTP/1.1 403 Forbidden 4ms] 
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at "someUrl". 
(Reason: CORS header 'Access-Control-Allow-Origin' missing). 

निम्नलिखित मैं इस समस्या को कैसे हल कर सकते हैं?

+0

जो भी है कि समस्या का कारण बनता है, मुझे नहीं लगता कि यह के टुकड़े हैं कि विवादित पोस्ट किया है के भीतर है। मैंने इसे कम से कम कोड के साथ ताजा स्प्रिंग बूट (1.3.2।) सेटअप पर आज़माया और जब मैं अन्य डोमेन से 'पोस्ट' करता हूं तो सीओआरएस हेडर सही ढंग से जोड़े जाते हैं। बूट का कौन सा संस्करण आप उपयोग कर रहे हैं और किस उपयोगकर्ता एजेंट से आप अपने अनुरोधों को पोस्ट करते हैं? आपकी परियोजना में अन्य निर्भरताएं आपके कॉर्स सेटिंग्स को ओवरराइड कर सकती हैं (या नियंत्रकों पर शायद अधिक स्पष्ट कॉन्फ़िगरेशन?)? – sthzg

+0

मैं वसंत बूट 1.3.0.RELEASE का उपयोग करता हूं और उपयोगकर्ता एजेंट फ़ायरफ़ॉक्स है। असल में यह एपी-गेटवे एप्लिकेशन है जो अन्य वसंत बूट अनुप्रयोगों के अन्य अंतराल पर रीडायरेक्ट करता है। मैं नेटफ्लिक्स से जुउल का उपयोग करता हूं। – nurgasemetey

उत्तर

15

वसंत-बूट अनुप्रयोग के साथ CORS फिल्टर कॉन्फ़िगर करने की सरल रास्ता बनाने के लिए है @Component वर्ग जो फ़िल्टर इस तरह लागू करता है:

@Component 
public class SimpleCORSFilter implements Filter { 

    @Override 
    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, PUT, OPTIONS, DELETE, PATCH"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     response.setHeader("Access-Control-Expose-Headers", "Location"); 
     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) {} 

    @Override 
    public void destroy() {} 

} 

यह वसंत के साथ अच्छा काम करता है बूट 1.3.0

संपादित करें:

अभी भी, वसंत-बूट के साथ काम करता 1.5.8

+0

यह कक्षा – Bleser

+0

काम नहीं कर रही है यदि आप http मूल प्रमाणीकरण का उपयोग कर रहे हैं, तो 'एक्सेस-कंट्रोल-स्वीकृति-हेडर' में टोकन 'प्राधिकरण 'को जोड़ना न भूलें। –

+2

यहां लागू किया गया 'फ़िल्टर'' javax.servlet.Filter' है – Tadhg