Как реализует 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.