স্প্রিং সিওআরএস কোনও 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনাম উপস্থিত নেই


89

ওয়েব.এক্সএমএল জাভা কনফিগারেশনে পোর্ট করার পরে আমি নিম্নলিখিত সমস্যাটি পেয়ে যাচ্ছি

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.

কয়েকটি বসন্তের রেফারেন্সের ভিত্তিতে নিম্নলিখিত প্রয়াসটির চেষ্টা করা হয়েছে:

@Configuration
@ComponentScan(basePackageClasses = AppConfig.class, useDefaultFilters = false, includeFilters = {
        @Filter(org.springframework.stereotype.Controller.class) })
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/*").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
                .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
                        "Access-Control-Request-Headers")
                .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
                .allowCredentials(true).maxAge(3600);
    }

}

নির্বাচিত মানগুলি একটি कार्यरत ওয়েব.এক্সএমএল ফিল্টার থেকে নেওয়া হয়েছিল:

<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>

স্প্রিং জাভা কনফিগার পদ্ধতি ওয়েব.এক্সএমএল ফাইলের মতো কাজ করছে না এমন কোনও ধারণা?

উত্তর:


115

থেকে CorsMapping পরিবর্তন registry.addMapping("/*")করতে registry.addMapping("/**")addCorsMappingsপদ্ধতি।

এই স্প্রিং সিওআরএস ডকুমেন্টেশন দেখুন

ডকুমেন্টেশন থেকে -

পুরো অ্যাপ্লিকেশনটির জন্য CORS সক্ষম করা যতটা সহজ:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

আপনি সহজেই যে কোনও বৈশিষ্ট্য পরিবর্তন করতে পারেন, পাশাপাশি কেবলমাত্র একটি নির্দিষ্ট পথের ধরণে এই কর্স কনফিগারেশন প্রয়োগ করুন:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("http://domain2.com")
            .allowedMethods("PUT", "DELETE")
            .allowedHeaders("header1", "header2", "header3")
            .exposedHeaders("header1", "header2")
            .allowCredentials(false).maxAge(3600);
    }
}

কন্ট্রোলার পদ্ধতি সিওআরএস কনফিগারেশন

@RestController
@RequestMapping("/account")
public class AccountController {
  @CrossOrigin
  @RequestMapping("/{id}")
  public Account retrieve(@PathVariable Long id) {
    // ...
  }
}

পুরো নিয়ামকের জন্য CORS সক্ষম করতে -

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

    @RequestMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }

    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

আপনি এমনকি নিয়ামক স্তরের এবং পদ্ধতি-স্তরের CORS কনফিগারেশন উভয়ই ব্যবহার করতে পারেন; স্প্রিং এর পরে মার্জড CORS কনফিগারেশন তৈরি করতে উভয় টিকা থেকে বৈশিষ্ট্যগুলি একত্রিত করা হবে।

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

    @CrossOrigin("http://domain2.com")
    @RequestMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }

    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

37
পুরো অ্যাপ্লিকেশনটির জন্য সিওআরএস সক্ষম করা আমার পক্ষে কাজ করে না।
দিমিত্রি কোপ্রিভা

4
ব্যবহারটি addCorsMappingআমার পক্ষে কাজ করে না, এটি বসন্ত সুরক্ষার কারণেই বলে প্রলুব্ধ করে ... তবে এখানেcorsConfigurationSource পরামর্শ হিসাবে একটি শিম যোগ করার ফলে আমার সমস্যা সমাধান হয়েছে
জেফ্রি

4
সমস্ত ক্লায়েন্টদের রেজিস্ট্রি.এডিডিম্যাপিং ("/ **") অনুমতি দেওয়ার জন্যও ভুলে যাওয়া উচিত নয় allowedঅরোগডআরগিনস ("*"); বসন্ত.io
guides/

4
আপনি সত্যিই একটি জীবনদাতা। আমি স্প্রিং ৪.২ ব্যবহার করছি এবং অগণিত অন্যান্য বিকল্প চেষ্টা করেছি এবং যতক্ষণ না আমি অ্যাডকর্সম্যাপিংস ওভাররাইড উপায়ে চেষ্টা করি ততক্ষণ এগুলি সবই কার্যকর হয় না। সাহায্য বা না করা হতে পারে স্ট্যান্ডার্ড সিওআরএস হেডার পাশাপাশি অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনাম যুক্ত করা হয়
ভাইরনাচ

4
এটির 2020 এবং স্প্রিং বুটের টিকা এখনও কার্যকর হয় না।
thepogrammer

15

সহায়ক টিপ - আপনি যদি স্প্রিং ডেটা বিশ্রাম ব্যবহার করেন তবে আপনার আলাদা পদ্ধতির প্রয়োজন।

@Component
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter {

 @Override
 public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
    config.getCorsRegistry().addMapping("/**")
            .allowedOrigins("http://localhost:9000");
  }
}

4
এই পোস্টের জন্য ধন্যবাদ। আমি যখন আপনার পোস্টটি লক্ষ্য করেছিলাম যে স্প্রিং ডেটা আরএসটি একটি ভিন্ন পদ্ধতির ব্যবহার করে তখন আমি আশা হারাতে শুরু করি। পুরোপুরি এখন আমার জন্য কাজ করে!
জোনাথন ক্রাগুট 25'19

4
RepositoryRestConfigurerAdapterঅবচয় করা হয়। শুধু RepositoryRestConfigurerসরাসরি প্রয়োগ করে।
গুস্তাভো রডরিগস

11

আমাদের একই সমস্যা ছিল এবং আমরা এটি নীচের মত স্প্রিংয়ের এক্সএমএল কনফিগারেশন ব্যবহার করে সমাধান করেছি:

এটি আপনার প্রসঙ্গে xML ফাইলটিতে যুক্ত করুন

<mvc:cors>
    <mvc:mapping path="/**"
        allowed-origins="*"
        allowed-headers="Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Authorization, X-Requested-With, requestId, Correlation-Id"
        allowed-methods="GET, PUT, POST, DELETE"/>
</mvc:cors>

5

যদি আপনি স্প্রিং সিকিউরিটি ver> = 4.2 ব্যবহার করে থাকেন তবে আপনি আপাচে এর পরিবর্তে স্প্রিং সিকিউরিটির স্থানীয় সমর্থন ব্যবহার করতে পারেন:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

উপরের উদাহরণটি একটি স্প্রিং ব্লগ পোস্ট থেকে অনুলিপি করা হয়েছিল যাতে আপনি একটি নিয়ামক, নির্দিষ্ট নিয়ামক পদ্ধতি ইত্যাদিতে সিওআরএস কীভাবে কনফিগার করতে হয় সে সম্পর্কেও তথ্য পেতে পারেন এছাড়াও এক্সএমএল কনফিগারেশন উদাহরণগুলির পাশাপাশি স্প্রিং বুট ইন্টিগ্রেশন রয়েছে।


5

ওমরের জবাব অনুসরণ করে, আমি WebConfig.javaএই কনফিগারেশনটির সাথে ডাকা আমার আরএসটি এপিআই প্রজেক্টে একটি নতুন ক্লাস ফাইল তৈরি করেছি :

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

এটি যে কোনও উত্সকে এপিআই অ্যাক্সেস করার অনুমতি দেয় এবং এটি বসন্ত প্রকল্পের সমস্ত নিয়ামককে প্রয়োগ করে।


5

ওমকারের উত্তরটি বেশ ব্যাপক।

তবে গ্লোবাল কনফিগার অংশের কিছু অংশ পরিবর্তন হয়েছে।

মতে বসন্ত বুট 2.0.2.RELEASE রেফারেন্স

সংস্করণ ৪.২ অনুসারে, স্প্রিং এমভিসি সিওআরএস সমর্থন করে। আপনার স্প্রিং বুট অ্যাপ্লিকেশনে @ ক্রসআরগিন টীকা সহ কন্ট্রোলার পদ্ধতি সিআরএস কনফিগারেশন ব্যবহার করার জন্য কোনও নির্দিষ্ট কনফিগারেশন লাগবে না। নিম্নলিখিত উদাহরণে দেখানো হয়েছে এমন একটি কাস্টমাইজড অ্যাডকর্মস ম্যাপিংস (কর্সরেজিস্ট্রি) পদ্ধতিতে ওয়েবএমভিসিসিফিগুরার বিনকে নিবন্ধিত করে গ্লোবাল সিওআরএস কনফিগারেশন সংজ্ঞায়িত করা যেতে পারে:

@Configuration
public class MyConfiguration {

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

WebMvcConfigurerAdapterতবে এই পোস্টে সর্বাধিক উত্তর

WebMvcConfigurerAdapter প্রকারটি হ্রাস করা হয়েছে

স্প্রিং 5 এর পরে আপনার কেবল ইন্টারফেস WebMvcConfigurer প্রয়োগ করতে হবে:

public class MvcConfig implements WebMvcConfigurer {

এটি কারণ জাভা 8 ইন্টারফেসগুলিতে ডিফল্ট পদ্ধতি প্রবর্তন করে যা ওয়েবএমভিসিসিফিগিউরার অ্যাডাপ্টার শ্রেণীর কার্যকারিতা কভার করে


2

পাবলিক ক্লাস ট্র্যাকিং সিস্টেম প্রয়োগ {

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

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("http://localhost:4200").allowedMethods("PUT", "DELETE",
                        "GET", "POST");
            }
        };
    }

}

0

আমার মতো বার্তাও ছিল No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.

আমি করগুলি সঠিকভাবে কনফিগার করেছি, তবে রাউটারফুনসিয়নে ওয়েবফ্লুসে যা অনুপস্থিত ছিল তা হ'ল গ্রহণযোগ্যতা এবং কনটেন্ট টাইপের শিরোনামের APPLICATION_JSON এই অংশের কোডটির মতো:

@Bean
RouterFunction<ServerResponse> routes() {
    return route(POST("/create")
                              .and(accept(APPLICATION_JSON))
                              .and(contentType(APPLICATION_JSON)), serverRequest -> create(serverRequest);
}


0

কিছু কারণে এখনও কেউ যদি সিওআরএস বাইপাস করতে না সক্ষম হয় তবে কোন শিরোনামটি ব্রাউজার আপনার অনুরোধটি অ্যাক্সেস করতে চায় তা লিখুন।

আপনার কনফিগারেশন ফাইলের মধ্যে এই বিন যোগ করুন।

@Bean
public WebSecurityConfigurerAdapter webSecurity() {
    return new WebSecurityConfigurerAdapter() {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.headers().addHeaderWriter(
                    new StaticHeadersWriter("Access-Control-Allow-Origin", "*"));


        }
    };
}

এইভাবে আমরা ব্রাউজারকে বলতে পারি যে আমরা সমস্ত উত্স থেকে ক্রস-উত্সের অনুমতি দিচ্ছি। আপনি যদি নির্দিষ্ট পথ থেকে সীমাবদ্ধ রাখতে চান তবে "*" then ' http: // লোকালহোস্ট: 3000 ', ""} এ পরিবর্তন করুন}

Helpfull রেফারেন্স এই আচরণ বুঝতে https://www.concretepage.com/spring-4/spring-4-rest-cors-integration-using-crossorigin-annotation-xml-filter-example


0

আমি @ ক্রসআরগিন টীকা ব্যবহার করে বসন্ত বুটে সমাধানটি পেয়েছি ।

@RestController
@CrossOrigin
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.