我已经编写了Angular JS程序,在其中我正在执行get请求并尝试从Spring Boot Rest服务中获取资源。但是我遇到了这个错误:
否'访问控制 - 允许 - 原始'标题存在于请求 资源
在Angular JS中:
ctrl.js
(function(){
"use strict";
angular.module("app")
.controller("chatCtrl",function($scope,$http){
$scope.name = "ujjawal";
$scope.usermessages = [];
$scope.botmessages = [];
$scope.onSend = onSend;
function onSend(){
var usersegment = {
"text":this.msg
}
this.msg = "";
this.usermessages.push(usersegment);
$http.get("http://localhost:8080/messages/").then(function(response){
console.log(response.data);
var botsegment = {
"id":response.data.id,
"text":response.data.text
}
$scope.botmessages.push(botsegment);
});
}
});
}(((;
在春季靴中:
MessagsController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MessagesController {
private int id = 0;
@RequestMapping("/messages")
public Messages getMessages(){
id+=1;
return new Messages(Integer.toString(id),"Bot is replying hi");
}
}
messages.java
public class Messages {
private String id;
private String messages;
public Messages(String id, String messages) {
this.id = id;
this.messages = messages;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMessages() {
return messages;
}
public void setMessages(String messages) {
this.messages = messages;
}
}
看来我需要通过"访问控制"标题"访问控制",但我不知道如何。我看到了很多网站和文档,但没有得到。请帮助。
您应该在RestController中添加@CrossOrigin
注释,例如:
@RestController
@CrossOrigin("*")
public class MessagesController {
这将启用来自 all 主机(*
(的CORS请求。您可能需要限制它,因此只有特定的主机,例如@CrossOrigin(origins="http://angularjs:8080")
背景:如果您的AngularJS应用程序要求您的浏览器将请求发送给与为AngularJS应用程序(例如angularjs:8080
(的host:port
发送的请求,则浏览器将首先询问host:port
,如果它允许angularjs:8080
中的CORS。如您的情况,如果您的RestController的HTTP响应不包含适当的CORS标头,则浏览器将拒绝您的应用程序提出的请求。
这在今年春季入门指南中很好地解释了:https://spring.io/guides/gs/rest-service-cors/