【问题标题】:origin has been blocked by CORS policy Spring boot and React来源已被 CORS 策略 Spring boot 和 React 阻止
【发布时间】:2020-05-03 15:09:25
【问题描述】:

使用 React 的 Spring Boot

从源“http://localhost:3000”访问“http://localhost:8080/”处的 XMLHttpRequest 已被 CORS 策略阻止:

这是一个返回所有区域对象的控制器

从源“http://localhost:3000”访问位于“http://localhost:8080/”的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

package com.ministry.demo.controller;

import com.ministry.demo.model.District;
import com.ministry.demo.repository.DistrictRepository;
import com.ministry.demo.service.DistrictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping(path = "district")
public class DistrictController {
    @Autowired
    DistrictService service;

    @GetMapping(path = "getAll")
    List<District> getAllDistrict(){
        return service.getAllDistricts();
    }
}

【问题讨论】:

    标签: reactjs spring-boot controller cors-anywhere


    【解决方案1】:

    如果您的后端和您的应用不在同一个地址上运行,您的浏览器通常不允许您调用后端。 这是一项安全功能。

    要让您的浏览器调用您的 api,请将 Access-Control-**** 标头添加到您的后端响应中(从 Spring 响应时)。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

    允许所有来源的最基本的标题:

    Access-Control-Allow-Origin: *
    

    这是在 Spring 中添加这些标头的教程:https://spring.io/guides/gs/rest-service-cors/

    【讨论】:

    • 使用@CrossOrigin 注释后,错误消失了。谢谢
    【解决方案2】:

    MyConfiguration.java

    @Configuration
    public class MyConfiguration implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedMethods("*");
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      我找到了答案

      package com.ministry.demo.controller;
      
      import java.util.List;
      
      @RestController
      @CrossOrigin
      @RequestMapping(path = "district")
      public class DistrictController {
          @Autowired
          DistrictService service;
      
          @GetMapping(path = "getAll")
          List<District> getAllDistrict(){
              return service.getAllDistricts();
          }
      }
      

      【讨论】:

        【解决方案4】:

        找到适合我的替代答案。

        @Configuration
        @EnableWebSecurity(debug = true)
        public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        
            @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.csrf().disable()
                        .authorizeRequests()
                        .anyRequest().permitAll()
                        .and().httpBasic();
            }
        
            @Bean
            public FilterRegistrationBean corsFilter() {
                UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
                CorsConfiguration config = new CorsConfiguration();
                config.addAllowedOrigin("*");
                config.addAllowedHeader("*");
                config.addAllowedMethod("*");
                source.registerCorsConfiguration("/**", config);
                FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
                bean.setOrder(0);
                return bean;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-08-29
          • 2021-01-23
          • 2019-12-29
          • 1970-01-01
          • 2021-09-15
          • 2021-12-25
          • 2020-05-28
          • 2021-01-07
          • 1970-01-01
          相关资源
          最近更新 更多