Как реализует CORS с Javascript, jQuery?

У меня возникли проблемы с обслуживанием отдыха. Уже реализован фильтр CORS в моем приложении Java, но когда я использую $.ajax() он возвращает проблему CORS. Использование $.getJSON может получить доступ к этому методу, однако я не могу добавить в него заголовки.

Мне нужно знать, как добавить заголовок в $.getJSON или как распознать CORS, который я добавил в своей службе Java.

Я использую Java 8, Wildfly 8.1-Final, RestEasy и т.д.

Мой аякс вот так:

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 ответа

Решение проблемы заключалось в том, чтобы добавить токен слова:

responseContext.getHeaders().add("Access-Control-Allow-Headers", "token, origin, content-type, accept, authorization");

CORS в моем filter на Java, так как я использую его в 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"); }
}


В запросе 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); }
});

Если вы работаете в системе каталогов, вам необходимо отключить защиту от хрома и разрешить проверку CORS в вашей локальной системе. Для этого перейдите в папку chrome.exe (я говорю о окнах здесь) и выполните эту команду:

chrome.exe --disable-web-security

licensed under cc by-sa 3.0 with attribution.