CORS - Access-Control-Allow-Origin问题

时间:2016-02-19 12:02:42

标签: javascript java angularjs api rest

我有一个AngularJS Web应用程序,其RESTful Jersey Api作为后端。 我正在调用此API

function Create(user) {
        return $http.post('http://localhost:8080/NobelGrid/api/users/create/', user).then(handleSuccess, handleError('Error creating user'));
    }

这是API(POST)的代码:

/**
 * This API create an user
 * 
 * @param data
 * @return
 */
@Path("create")
@POST
@Produces("application/json")
public Response create(String data) {

    UserDataConnector connector;
    JSONObject response = new JSONObject(data);

    User userToCreate = new User(response.getString("surname"), response.getString("name"),
            response.getString("mail"), response.getString("username"), response.getString("password"), 0);

    try {

        connector = new UserDataConnector();
        connector.createUser(userToCreate);
    } catch (IOException e) {
        e.printStackTrace();
    }

    return Response.status(Response.Status.OK) // 200
            .entity(userToCreate)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();

}

/**
 * CORS compatible OPTIONS response
 * 
 * @return
 */
@Path("/create")
@OPTIONS
public Response createOPT() {

    System.out.println("Called OPTION for create API");
    return Response.status(Response.Status.OK) // 200
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS").build();
}

我已为create添加了一个OPTION API,以使该API与CORS兼容。事实上,API运行良好,因为在POST之前调用OPTIONS API并在我的数据库中创建用户。无论如何在前端我得到这个错误:

  

XMLHttpRequest无法加载http://localhost:8080/NobelGrid/api/users/create/。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:63342'因此不允许访问。响应的HTTP状态代码为500。

有人可以帮助我吗?

更新

堆栈建议此问题No Access-Control-Allow-Origin header is present on the requested resource尽可能重复,但该解决方案对我不起作用,因为Response Jersey API中不存在addHeader(String)

更新2

我使用这个解决方案解决了这个问题:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我有另一个错误。我会做另一个问题因为我认为这是一个不同的论点。

先谢谢!

2 个答案:

答案 0 :(得分:0)

我使用这个解决方案解决了这个问题:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我有另一个错误。

enter image description here

我会做另一个问题因为我认为这是一个不同的论点。

答案 1 :(得分:0)

使用CORS NPM并添加为中间件。

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

------------------------- 将此行添加到您的app.js中 ------- ------------------

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');