关于reactjs:origin已被CORS策略Spring Boot和React阻止

origin has been blocked by CORS policy Spring boot and React

带有React的Spring Boot

从CORS策略阻止从原点" http:// localhost:3000"访问" http:// localhost:8080 /"处的XMLHttpRequest:

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

Access to XMLHttpRequest at 'http://localhost:8080/ from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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();
    }
}

我找到了答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
    }
}

MyConfiguration.java

1
2
3
4
5
6
7
8
9
10
@Configuration
public class MyConfiguration implements WebMvcConfigurer {

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

}

如果您的后端和应用程序不在同一地址上运行,则浏览器通常不允许您调用后端。
这旨在成为一种安全功能。

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

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

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

1
Access-Control-Allow-Origin: *

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