2016-04-05 1 views
0

Когда я использую Spring RestTemplate для вызова Rest API.Сценарий вызова Spring RestTemplate для работы с API, но jQuery не удалось из-за политики одного источника

public class JiraBusImpl implements JiraBus { 
    private RestTemplate restTemplate = new RestTemplate(); 

    HttpHeaders headers = BusUtils.createHttpHeaderWithDefaultBasicAuth(); 

    @Override 
    public List<JIRAProject> getProjects() { 
    HttpEntity<String> request = new HttpEntity<String>(headers); 
    ResponseEntity<JIRAProject[]> response = restTemplate.exchange("http://jira_url:port/rest/api/2/project", 
      HttpMethod.GET, request, JIRAProject[].class); 
    JIRAProject[] projectsField = response.getBody(); 

    return Arrays.asList(projectsField); 
    } 
} 

Он работал нормально, но когда я использую JQuery для вызова, это не удалось, и выдает ошибку

XMLHttpRequest не может загрузить URL. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Origin 'http://localhost:8080', следовательно, не допускается.

Вот мой JQuery код:

$.ajax({ 
    url: 'http://jira_url:port/rest/api/2/project', 
    type: 'GET', 
    dataType: 'json', 
    beforeSend: function (xhr) { 
    xhr.setRequestHeader ("Authorization", "Basic " + btoa('username' + ":" + 'password')); 
    }, 
    success: function(data) { 
    console.log(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
    } 
}); 

Как RestTemplate сделать это?

ответ

0

Вы можете использовать аннотацию @CrossOrigin().

https://spring.io/guides/gs/rest-service-cors/

Или просто добавить фильтр, чтобы установить заголовок ответа, чтобы поперечное происхождение.

'Access-Control-Allow-Origin' error in Spring MVC + Zepto POST


В вашем АЯКС вызова JQuery, изменить его dataType: "jsonp", чтобы включить перекрестную происхождение.


Извините за мое недоразумение. В браузере применяется политика одинакового происхождения. https://en.wikipedia.org/wiki/Same-origin_policy

Вы даже можете отключить его. Disable same origin policy in Chrome

Таким образом, это означает, что в первую очередь доступ к услугам отдыха может быть осуществлен любыми клиентами, если это разрешает только серверная сторона. Однако для обеспечения безопасности веб-браузер отключает его. Так что это не проблема, как это делает RestTemplate. Это связано с тем, что этот веб-браузер отключает его.

+0

Спасибо, но я хочу знать, как это сделать RestTemplate. У меня нет разрешения на изменение сервера – dauruy

+0

Вы пробовали JSONP? –

+0

Вы неправильно поняли мой вопрос, я не хочу знать, как вызвать API с помощью jQuery, я хочу знать, как это делает RestTemplate. – dauruy