2016-04-05 15 views
0

Bir Rest API'sini çağırmak için Spring RestTemplate'i kullandığımda. Spring RestTemplate API'ye çağrı başlatıldı, ancak jQuery aynı kaynak politikası nedeniyle başarısız oldu

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); 
    } 
} 

Normalde çalıştı ama çağırmak için jQuery kullanırken, başarısız ve

XMLHttpRequest url yükleyemiyor hata verir. Ön kontrol isteğine yanıt, erişim denetimi kontrolünden geçmez: İstenen kaynağa 'Erişim-Kontrol-İzin-Kökeni' başlığı yok. Bu nedenle 'http://localhost:8080' kökeni erişimine izin verilmiyor.

$.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) { 
    } 
}); 

Nasıl bunu RestTemplate yapabilirsiniz: my jQuery kod İşte

mı?

cevap

0

@CrossOrigin() ek açıklamasını kullanabilirsiniz.

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

Ya da sadece çapraz kökenli izin verilen yanıt başlığını ayarlamak için bir filtre ekleyin. jQuery ajax çağrısında


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

, çapraz kökenli etkinleştirmek için dataType: "jsonp" olarak değiştirin.


Yanlış anlaşılmadığım için özür dilerim. Web tarayıcısında aynı menşe politikası uygulanır.

Hatta bunu da kapatabilirsiniz. Disable same origin policy in Chrome

Bu, ilk etapta, sadece sunucu tarafı izin veriyorsa, herhangi bir istemci tarafından bir dinlenme servisine erişilebilir. Ancak, güvenlik sorunları için web tarayıcıları bunu devre dışı bırakır. Yani RestTemplate'in yaptığı problem değil. Çünkü bu web tarayıcısı devre dışı bırakıyor.

+0

Teşekkür ederim, ama bilmek istediğim RestTemplate'in bunu nasıl yapacağıdır. Sunucuyu değiştirme iznim yok – dauruy

+0

JSONP'yi denediniz mi? –

+0

Sorunu yanlış anlıyorsunuz, jQuery ile nasıl API aradığını öğrenmek istemiyorum, RestTemplate'in bunu nasıl yaptığını bilmek istiyorum. – dauruy

İlgili konular