我在使用休息服务时遇到了麻烦。已经在我的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");
}
}
答案 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");
}
}