मैं कोरस मुद्दे द्वारा मारा गया था जब मैं Grails 3.0 आराम आवेदन के साथ emberjs ढांचे के साथ खेल रहा था। इस आलेख में दिए गए चरणों के बाद http://www.greggbolinger.com/rendering-json-in-grails-for-ember-js/ ने मुझे आगे बढ़ने में मदद की।
आलेख दिखाता है कि आप कॉर्स इंटेसेप्टर क्लास बनाने के लिए नए इंटरसेप्टर का उपयोग कैसे कर सकते हैं जो सही शीर्षलेख सेट करता है।
class CorsInterceptor {
CorsInterceptor() {
matchAll()
}
boolean before() {
header("Access-Control-Allow-Origin", "http://localhost:4200")
header("Access-Control-Allow-Credentials", "true")
header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
header("Access-Control-Max-Age", "3600")
true
}
boolean after() { true }
}
यह जीईटी अनुरोधों के लिए अपेक्षित के रूप में काम करता था, लेकिन POST और PUT अनुरोधों के लिए विफल रहा। इसका कारण यह था कि एक विकल्प प्रीफलाइट अनुरोध पहले http://localhost:8080/mycontroller/1234 पर भेजा गया था, जो मेरे मामले में 404 को नहीं मिला था।
इस जवाब https://stackoverflow.com/a/31834551 की मदद से मैं इस के बजाय करने के लिए CorsInterceptor वर्ग संशोधित:
class CorsInterceptor {
CorsInterceptor() {
matchAll()
}
boolean before() {
header("Access-Control-Allow-Origin", "http://localhost:4200")
boolean options = ("OPTIONS" == request.method)
if (options) {
header("Access-Control-Allow-Origin", "http://localhost:4200")
header("Access-Control-Allow-Credentials", "true")
header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
header("Access-Control-Max-Age", "3600")
response.status = 200
}
true
}
boolean after() { true }
}
अब पोस्ट और डाल अनुरोध काम कर रहे थे।
यह मेरे लिए काम नहीं कर रहा था। मैं Grails 2.5.4 का उपयोग कर रहा हूं, और src/groovy में 'corsFilter' वर्ग बना रहा हूं और फिर ** resource.groovy ** में बीन को परिभाषित कर रहा हूं ** फ़िल्टर को तार नहीं मिला। –
कोई बात नहीं। मैंने टिप्पणी को गलत समझा। ऐसा लगता है कि Grails 2.x प्लगइन का उपयोग करना मेरे लिए काम कर रहा है: https://github.com/davidtinker/grails-cors धन्यवाद डेविड! –