Java @SpringBoot中的CrossOrigin

Java @SpringBoot中的CrossOrigin,java,spring,spring-boot,cors,network-programming,Java,Spring,Spring Boot,Cors,Network Programming,我正在测试我对CORS工作原理的理解。我有两个应用程序在不同的端口上运行。我正在从应用程序B向应用程序A发送请求。应用程序A在端口8080上运行 @Controller @EnableAutoConfiguration public class HelloController { @CrossOrigin(origins = "http://localhost:9000") @RequestMapping("/hello")

我正在测试我对CORS工作原理的理解。我有两个应用程序在不同的端口上运行。我正在从应用程序B向应用程序A发送请求。应用程序A在端口8080上运行

  @Controller
    @EnableAutoConfiguration
    public class HelloController {

        @CrossOrigin(origins = "http://localhost:9000")
        @RequestMapping("/hello")
        @ResponseBody
        public String sayHello() {
            return "Hello World Developer!!!";
        }
    }
应用程序B在端口8081上运行

 @RequestMapping("/hello")
        @ResponseBody
        public String sayHello() throws IOException {


             String GET_URL = "http://localhost:8080/hello";
            URL obj = new URL(GET_URL);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("GET");
            int responseCode = con.getResponseCode();
            InputStream inputStream;
            if (200 <= responseCode && responseCode <= 299) {
                inputStream = con.getInputStream();
            } else {
                inputStream = con.getErrorStream();
            }

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                            inputStream));

            StringBuilder response = new StringBuilder();
            String currentLine;

            while ((currentLine = in.readLine()) != null)
                response.append(currentLine);

            return response.toString();


        }
@RequestMapping(“/hello”)
@应答器
公共字符串sayHello()引发IOException{
字符串GET_URL=”http://localhost:8080/hello";
URL obj=新URL(获取URL);
HttpURLConnection con=(HttpURLConnection)obj.openConnection();
con.setRequestMethod(“GET”);
int responseCode=con.getResponseCode();
输入流输入流;

if(200跨源资源共享(CORS)是一种安全策略,它使用HTTP头通知浏览器允许在一个源(域)上运行的web应用程序有权从另一个源的服务器访问选定的资源

我想下面的链接会让你更清楚


您是否可以查看响应头“access control allow origin”对应用程序A的请求的值,该值不应为“*”,而应为“。”

假设您的应用程序在不同的端口上运行

我添加了以下代码来检查正在发送的所有头

for (Entry<String, List<String>> header : con.getHeaderFields().entrySet()) {
    System.out.println(header.getKey() + "=" + header.getValue());
}
请为您的案件尝试同样的

因此,API调用中没有可用的
访问控制允许源代码。
这可以被视为一个独立的调用,图片中没有COR

这就像从浏览器或邮递员那里打电话一样

若你们真的想测试CORS,试着从8081应用程序中运行的某个UI调用相同的ajax API


请检查浏览器中的标题检查哪些参数正在通过。您将看到CORS错误。

这似乎没有回答我的问题。根据定义,localhost:8080和localhost:8081是两个不同的来源。因此,从localhost:8081到8080的请求不应该被服务,因为端口不是9000。我缺少任何信息吗g?我认为该链接将在某种程度上帮助您澄清主题。在该链接中,您的问题没有确切的解决方案。抱歉,如果没有用的话!这是我得到的“内容类型”的响应标题→文本/纯文本;字符集=UTF-8内容长度→74日期→2019年12月24日星期二05:10:01格林威治标准时间保持活力→超时=60次连接→保持活动状态``您需要向http请求添加一些头。这些头是“源”、“访问控制请求方法”和“访问控制请求头”。如果请求中没有这些标头,CORS将无法工作。您能否向我解释一下,为什么API调用中没有访问控制allow origin可用。这与ajax API调用有何不同?
Keep-Alive=[timeout=60]
Transfer-Encoding=[chunked]
null=[HTTP/1.1 200]
Connection=[keep-alive]
Date=[Tue, 24 Dec 2019 05:03:36 GMT]
Content-Type=[application/json]