Java @SpringBoot中的CrossOrigin
我正在测试我对CORS工作原理的理解。我有两个应用程序在不同的端口上运行。我正在从应用程序B向应用程序A发送请求。应用程序A在端口8080上运行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")
@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]