2011-03-23 8 views
6

JavaScript istemcisinden (A makinesinde çalışan) Web sunucusuna (makine B'de çalışan) AJAX çağrısı yapıyorum. Müşteri RESTful Web hizmeti (Jersey) tarafından sunulan bir URL'ye erişim dener ve hata ile bloke edilir: server"Erişim-Denetim-İzin-Menşei: *" REST Web Hizmeti'nde hiçbir etkiye sahip değildir.

Origin http://localhost/ is not allowed by Access-Control-Allow-Origin

Ben herhangi bir istemci erişime izin 2 başlık parametreleri eklendi. Ancak yardım etmedi:

@Context 
private HttpServletResponse servlerResponse; 

@POST 
@Path("testme") 
public void test(){ 
    servlerResponse.addHeader("Access-Control-Allow-Origin", "*"); 
    servlerResponse.addHeader("Access-Control-Allow-Credentials", "true"); 
} 

aynı başlıklarının

JSP durumunda çalışır:

<% 
    response.addHeader("Access-Control-Allow-Origin", "*"); 
    response.addHeader("Access-Control-Allow-Credentials", "true"); 
%> 
<html> 
<head><title>test jsp</title></head> 
<body> 
test 
</body> 
</html> 

Ben bir şey eksik?

sayesinde

PS istemci parçasıdır:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, java.io.IOException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) resp; 

    // This should be added in response to both the preflight and the actual request 
    response.addHeader("Access-Control-Allow-Origin", "*"); 

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { 
     response.addHeader("Access-Control-Allow-Credentials", "true"); 
    } 

    chain.doFilter(req, resp); 
} 
+0

XmlHttpRequest istemci kodunuz neye benziyor? POST kullanıyor mu? Uygulamanız yalnızca POST için yapılandırılmış gibi görünüyor. – monsur

+0

İstemcim POST kullanıyor. – lili

+2

Çözüm bulundu: gerekli yanıtları her yanıta ekleyen bir filtre yapılandırın. – lili

cevap

6

, her yanıt için gerekli başlıkları ekler javax.servlet.Filter uygulanan Bu, benim gibi tercihler yapmanın cevabı filtreleme yapmaktır (Jersey 2.x):

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext, 
      ContainerResponseContext responseContext) throws IOException { 

     responseContext.getHeaders().add("Access-Control-Allow-Origin", "*"); 
    } 
} 
+0

ama ajax ile hizmet dinlenmek için bir çağrı yaparken hata alıyorum. – Kumar

+0

@Kumar, hatayı ahax yoluyla düzeltiyor musunuz? – Sergey

+0

@Sergey Evet, ben yaptım ... Lütfen bu bağlantıya bakın ... http://stackoverflow.com/questions/21178823/jqery-call-of-java-rest-service-not-working-cors Thanks.Kumar Shorav – Kumar

3

@epeleg: bir çözüm olarak

$.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/login/testme", 
    dataType: 'json', 
    success: onLoginSuccess, 
    error: onLoginError 
}); 
İlgili konular