2016-06-23 7 views
18

मैं नीचे दिखाए गए WebMvcConfigurerAdapter के माध्यम से विश्व स्तर पर CORS को कॉन्फ़िगर करने का प्रयास कर रहा हूं। परीक्षण करने के लिए मैं एक बाहरी सेवा अनुकरण करने के लिए बनाए गए एक छोटे नोड ऐप के माध्यम से अपना एपीआई एंडपॉइंट मार रहा हूं। जब मैं इस तरीके का प्रयास प्रतिसाद सही हेडर शामिल नहीं है औरस्प्रिंग ग्लोबल सीओआरएस कॉन्फ़िगरेशन काम नहीं कर रहा है लेकिन नियंत्रक स्तर कॉन्फ़िगरेशन

XMLHttpRequest cannot load http://localhost:8080/api/query/1121. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:333' is therefore not allowed access. 

वैश्विक कॉन्फ़िग के साथ विफल

import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.CorsRegistry; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@EnableWebMvc 
@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 
     @Override 
     public void addCorsMappings(CorsRegistry registry) { 
      registry.addMapping("/api/query/**") 
        .allowedOrigins("*") 
        .allowedHeaders("*") 
        .allowCredentials(true); 
     } 
} 

हालांकि जब मैं @CrossOrigin एनोटेशन का उपयोग तो यह उचित हेडर के साथ जवाब सिर्फ ठीक काम करता है की तरह ।

@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*") 
@RestController 
@RequestMapping(value = "/api/query", produces = MediaType.APPLICATION_JSON_VALUE) 
public class QueryController { 
    ...... 
} 

उत्पादन

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:333 

क्या मैं वैश्विक config काम करने के लिए याद आ रही है (यहां दिए गए निर्देशों का पालन किया https://spring.io/blog/2015/06/08/cors-support-in-spring-framework)। मुझे लगता है कि नियंत्रक को एनोटेट करने के बाद से मुझे कुछ आसान याद आ रहा है।

+0

शायद '.allowedOrigins ("*")।अनुमति हैडर्स ("*") वैश्विक कॉन्फ़िगरेशन में अनावश्यक हैं –

उत्तर

0

मुझे लगता है कि अपने मानचित्रण परिभाषा एक * याद आ रही है: कि अतिरिक्त * बिना

registry.addMapping("/api/query/**") 

, इस विन्यास /api/query/1121 अनुरोध पथ पर मैप नहीं है (लेकिन यह /api/query/5 पर काम करेगा)।

+1

आपकी प्रतिक्रिया के लिए धन्यवाद, मैंने '"/api/query/** "भी कोशिश की और यह काम नहीं किया। मूल रूप से मुझे 'रजिस्ट्री.डैपिंग ("/ **")' के साथ 'हैलो वर्ल्ड' टाइप कार्यान्वयन भी था और इससे कोई फर्क नहीं पड़ता .. क्या मुझे किसी भी तरह से निर्दिष्ट करना है कि यह पोर्ट 8080 पर है? मुझे यह भी पता नहीं है ... ऐसा लगता है कि इसे ठीक काम करना चाहिए –

4

आपने उसमें विधि घोषित नहीं की है जो डिफ़ॉल्ट रूप से केवल विधि प्राप्त करती है। registry.allowedMethods("*");

+0

मुझे POST विधि के साथ एक ही समस्या का सामना करना पड़ रहा है। यह स्वीकृत विधि जोड़कर हल किया गया। –

7

वैश्विक CORS कॉन्फ़िगरेशन के लिए काम करने के लिए, क्लाइंट को इन दो शीर्षकों को विकल्प अनुरोध में जोड़ना होगा।

Origin: http://host.com 
Access-Control-Request-Method: POST 

हालांकि @ क्रॉसऑरिगिन एनोटेशन के लिए केवल "मूल" शीर्षलेख की आवश्यकता होती है।
आपका ग्राहक शायद "मूल" शीर्षलेख जोड़ता है लेकिन "एक्सेस-कंट्रोल-अनुरोध-विधि" ..... गायब है, यह आपके लिए @CrossOrigin के साथ क्यों काम करता है, लेकिन वैश्विक कॉन्फ़िगरेशन के साथ नहीं है।

0

मुझे इसी तरह के मुद्दे का सामना करना पड़ा। मैंने WebMvcConfigurerAdapter को WebMvc कॉन्फ़िगरेशन समर्थन में बदल दिया और यह काम करना शुरू कर दिया।

इसके अलावा मैंने जावा कॉन्फ़िगरेशन फ़ाइल में जावा कॉन्फ़िगरेशन में परिभाषित RequestMappingHandlerMapping भी स्थानांतरित कर दिया।

0

मैं इस मुद्दे में प्रलेखित सही समस्या का सामना करने के बाद, स्प्रिंग ग्लोबल कॉरस कॉन्फ़िगरेशन को काम करने में सक्षम था। मुझे 2 चीजें करना पड़ा:

  1. अनुमत ऑरिगिन नहीं हो सकता है * अगर अनुमतियां सत्य हैं। यह Mozilla.org

  2. एमवीसी निकालें: वसंत एक्सएमएल से एनोटेशन-संचालित। दोनों एक्सएमएल कॉन्फ़िगरेशन और @EnableWebMvc नहीं हो सकता है। वैश्विक वर्ग @EnableWebMvc के बिना काम नहीं करेगा, इस प्रकार एमवीसी: एनोटेशन-संचालित को हटा दिया जाना चाहिए।

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