使用 Spring Boot 和 Angular JS 的请求资源上不存在'Access-Control-Allow-Origin'标头



我已经编写了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/

相关内容

  • 没有找到相关文章

最新更新