2015-12-09 8 views
6

मैं आयनिक और स्प्रिंग बूट 1.3 का उपयोग कर रहा हूं। यह तब तक नहीं था जब तक कि मैं 1.3 तक अपग्रेड नहीं कर पाया कि मुझे यह समस्या मिल रही है ...अनुरोधित संसाधन पर 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति' शीर्षलेख मौजूद नहीं है। आयनिक, एंगुलरजेएस, स्प्रिंग बूट 1.3

स्पष्ट रूप से स्प्रिंग बूट 1.3 को अपडेट करने के बाद। CorsFilter पूरी तरह से अनदेखा किया जा रहा है। यह सब बहिष्कार मुझे पागल कर रहा है। तो मैंने नया रास्ता देखा और यही मुझे मिला।

package app.config; 

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; 

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addCorsMappings(CorsRegistry registry) { 
     registry.addMapping("/**") 
       .allowedOrigins("http://192.168.1.66:8101") 
       .allowCredentials(false) 
       .maxAge(3600) 
       .allowedHeaders("Accept", "Content-Type", "Origin", "Authorization", "X-Auth-Token") 
       .exposedHeaders("X-Auth-Token", "Authorization") 
       .allowedMethods("POST", "GET", "DELETE", "PUT", "OPTIONS"); 
    } 
} 

आवेदन के बूट पर कोड का उपरोक्त टुकड़ा उत्साहित है। कॉर्सफिल्टर के विपरीत हर बार निष्पादित किया जाता है जब कोई अनुरोध होता है। लेकिन स्प्रिंग बूट 1.3 पर स्विचिंग, अब मैं इसे श्रृंखला फ़िल्टर में नहीं प्राप्त कर सकता।

फिर से, कोड लोड किया जा रहा है, मैंने ब्रेक पॉइंट सेट किया है और एडर्स को हर बार कॉल किया जा रहा है ताकि सेटिंग बनाई जा रही हो। मैं अब भी इस त्रुटि

XMLHttpRequest cannot load http://192.168.1.66:8080/login?username=billyjoe&password=happy. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.1.66:8101' is therefore not allowed access. 

संपादित रही तो .... क्यों कर रहा हूँ नीचे मेरे पुराने CorsFilter है। के बाद से मैं वसंत बूट करने के लिए 1,3

package app.config; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Component; 

@Component 
public class CorsFilter implements Filter { 

    private final Logger log = LoggerFactory.getLogger(CorsFilter.class); 

    public CorsFilter() { 
     log.info("SimpleCORSFilter init"); 
    } 

    @Override 
    public void doFilter(ServletRequest req, 
         ServletResponse res, 
         FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 
     String clientOrigin = request.getHeader("origin"); 
     response.addHeader("Access-Control-Allow-Origin", clientOrigin); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT"); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Accept, Content-Type, Origin, Authorization, X-Auth-Token"); 
     response.addHeader("Access-Control-Expose-Headers", "X-Auth-Token"); 

     if (request.getMethod().equals("OPTIONS")) { 
      response.setStatus(HttpServletResponse.SC_OK); 
     } else { 
      chain.doFilter(request, response); 
     } 
    } 

    @Override 
    public void init(FilterConfig filterConfig) { 
    } 

    @Override 
    public void destroy() { 
    } 

} 

उत्तर

5

यह पता लगाया। मैं एक कस्टम टोकन लॉगिन का उपयोग कर रहा हूं और किसी कारण से कस्टम लॉगिन प्रमाणीकरण का उपयोग करते समय 1.3 और उच्चतम के लिए नई कॉन्फ़िगरेशन एक्सेस-कंट्रोल-ऑब्जेक्ट-उत्पत्ति के साथ प्रतिक्रिया सेट नहीं करता है। तो कहीं मेरे कस्टम लॉगिन में मुझे प्रतिक्रिया हेडर जोड़ना पड़ा।

httpServletResponse.addHeader("Access-Control-Allow-Origin", "http://192.168.1.66:8080"); 

वसंत के पुराने संस्करणों में तो यह इस हर एक कॉल किया जाता है स्थापित करेगा, CorsFilter फिल्टर में सेट है। ऐसा लगता है कि न्यू कॉन्फिग केवल कंट्रोलर को सही तरीके से कॉल करते समय काम करते हैं लेकिन चूंकि लॉगिन फ़िल्टर में संभाला जाता है और नियंत्रक नहीं, प्रतिक्रिया शरीर कभी सेट नहीं होता है।

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

    public void init(FilterConfig filterConfig) {} 

    public void destroy() {} 

} 

Raca की answare के रूप में: यह ठीक से Access-Control-Allow-Origin

6

अद्यतन आप कुछ इस तरह की कोशिश कर सकते यह अब काम करता है। यह मेरे लिए काम कर रहा है:।

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

    public void init(FilterConfig filterConfig) {} 

    public void destroy() {} 

} 
+0

प्रतिक्रिया के लिए धन्यवाद। 1.3 स्प्रिंग बूट को अपडेट करने से पहले। मेरे पास ऐसा कुछ था और यह पूरी तरह से काम किया। चूंकि मैंने स्प्रिंग बूट 1.3 में अपडेट किया है, इसलिए यह अब पूरी तरह से अनदेखा करता है। यही कारण है कि मैंने नया सेटअप जोड़ा। मैंने ऊपर अपना कॉर्सफिल्टर जोड़ा है। इसके अलावा यह आपके जैसा ही है, मुझे आईपी की उत्पत्ति मिलती है और इसे एक्सेस कंट्रोल को उत्पत्ति की अनुमति देती है। किसी भी मामले में, फ़ाइल को पूरी तरह अनदेखा किया जा रहा है जिसका मतलब है कि कोई भी सेटिंग कभी भी लागू नहीं की जा रही है। मैं यह भी जोड़ना चाहता हूं कि मैं वेबस्केट परत का उपयोग कर रहा हूं जो एस्ट्रिक मान की अनुमति नहीं देता है। – numerical25

+0

मेरे लिए भी एक ही फ़िल्टर काम करता है –

1

एक मेरी ओपन सोर्स प्रोजेक्ट मैं वसंत 4.2 के लिए अद्यतन befor CORS समर्थन की जरूरत मैं इस तरह एक फिल्टर का इस्तेमाल किया में उपयोगकर्ता प्रमाणित करता है। लेकिन जब मैं वसंत-बूट 1.3.3 में अद्यतन मैं नीचे के रूप में विन्यास बदल दिया है:

@SpringBootApplication 
@Configuration 
@EnableEurekaClient 
@RibbonClients 
@EnableCircuitBreaker 
@EnableZuulProxy 
@EnableJpaRepositories(basePackages = "it.valeriovaudi.documentlibrary.repository") 
@EnableTransactionManagement 
@EnableRedisHttpSession 
@PropertySource("classpath:restBaseUrl.properties") 
@EnableAspectJAutoProxy(proxyTargetClass = true) // without this declaration the RestTemplate injection wil be fails becouse spring cloud proxied this class for load balance with netflix ribbon 
public class UserDocumentLibraryClientApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(UserDocumentLibraryClientApplication.class, args); 
    } 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurerSupport() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    public EmbeddedServletContainerCustomizer exceptionHandling() { 
     return container -> container.addErrorPages(new ErrorPage("/exception")); 
    } 

    @Bean 
    public WebMvcConfigurer corsConfigurer() { 
     return new WebMvcConfigurerAdapter() { 
      @Override 
      public void addCorsMappings(CorsRegistry registry) { 
       registry.addMapping("/**"); 
      } 
     }; 
    } 
} 

यह मेरा परियोजना का मुख्य विन्यास से लिया जाता है और इस प्रकार का कॉन्फ़िगरेशन भी एक जटिल वितरित प्रणाली में मेरे लिए अच्छी तरह से काम स्प्रिंग क्लाउड के नेटफ्लिक्स एपीआई के साथ।

मुझे उम्मीद है कि यह आपकी मदद कर सकता है।

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