如何使用Javascript,jQuery实现CORS?

时间:2014-08-22 01:39:57

标签: java javascript jquery cors java-8

我在使用休息服务时遇到了麻烦。已经在我的Java应用程序中实现了CORS过滤器,但是当我使用$.ajax()时,它返回了CORS的问题。使用$.getJSON可以访问该方法,但我无法在其上添加标题。

我需要知道如何在$.getJSON中添加标头,或者如何让它识别我在Java服务中添加的CORS。

我正在使用Java 8,Wildfly 8.1-Final,RestEasy等

我这样的ajax:

var url = "http://pacoteiro-trysoft.rhcloud.com/api/v1/pacote/RC824435750CN";

$.ajax({
    async : true,
    type:'GET',
    contentType: 'application/json',
    url: url,
    cache:false,
    dataType: 'json',
    headers: {
        "token":"123"
    },

    success: function(data) { 
        alert("Cadastrado com sucesso!", data);
    },



 error: function(data) {
        alert("Erro!", data);
    }
});

和我的过滤方式:

@Provider
public class ConfigureCORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,ContainerResponseContext responseContext) throws IOException {
          responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
          responseContext.getHeaders().add("Access-Control-Allow-Headers", "application/json, origin, content-type, accept, authorization");
          responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
          responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
          responseContext.getHeaders().add("Access-Control-Max-Age", "1209600");
    }

}

2 个答案:

答案 0 :(得分:0)

在您的ajax请求中,您可以使用crossDomain选项以启用CORS

$.ajax({
    async : true,
    type:'GET',
    contentType: 'application/json',
    url: url,
    cache:false,
    dataType: 'json',
    crossDomain:true,
    headers: {
        "token":"123"
    },

    success: function(data) { 
        alert("Cadastrado com sucesso!", data);
    },



 error: function(data) {
        alert("Erro!", data);
    }
});

如果您正在使用目录系统,则需要禁用chrome安全性并允许在本地系统上进行CORS验证。要执行此操作,请转到chrome.exe文件夹(我在这里讨论的是Windows)并执行以下命令:

chrome.exe --disable-web-security

答案 1 :(得分:0)

问题的解决方案是添加令牌

  responseContext.getHeaders().add("Access-Control-Allow-Headers", "token, origin, content-type, accept, authorization");
我在CORS Java中的

filter,因为我在headers AJAX中使用它。完整的解决方案是:

@Provider
public class ConfigureCORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,ContainerResponseContext responseContext) throws IOException {
          responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
          responseContext.getHeaders().add("Access-Control-Allow-Headers", "token, origin, content-type, accept, authorization");
          responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
          responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
          responseContext.getHeaders().add("Access-Control-Max-Age", "1209600");
    }

}