2013-08-14 17 views
15

Dizgiyi döndürecek ve Java (JAX-WS) ile yazılmış bir RESTful web servisim var.RESTful webservice: javadaki üstbilgileri, Access-Control-Allow-Origin tarafından izin verilen XMLHttpRequest'i kabul edecek şekilde ayarlama

konsolunda http://localhost:8080/project/webservices/getlist/getListCustomers

bana hata mesajı aşağıda veriyor:

XMLHttpRequest yükleyemiyor url Kökeni localhost izin verilmez ben gibi URL ile bu webcoder isteği gönderdiğinizde Benim sorundur Erişim-Denetim-İzin-Kaynağı ile

Bu sorunu nasıl ele alabilirim?

Java kodu: Sorununuz CORS hakkında burada okuyun

@GET 
@Path("/getsample") 
public Response getMsg() { 
    String output = "Jersey say : " ; 
    return Response.status(200).entity(output).build(); 
} 

cevap

29

: http://enable-cors.org/

Kontrol senin getMsg bu bir yardım() yöntemini ise:
return Response.ok(output).header("Access-Control-Allow-Origin", "*").build();

Eğer yukarıda değil Çalışmanızı, Jersey filtresini hizmetinize eklemeyi deneyin.

package your.package; 

public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) { 

     cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*"); 
     cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true"); 
     cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD"); 
     cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With"); 

     return cresp; 
    } 
} 

Ve daha sonra birlikte web.xml kazanmak kayıt ol: Filtre sınıf oluşturun

<servlet> 
<servlet-name>CORS Filter</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
    <param-value>your.package.CORSFilter</param-value> 
</init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CORS Filter</servlet-name> 
    <url-pattern>/webservices/*</url-pattern> 
</servlet-mapping> 


Başka bir çözüm tarayıcı için OPTIONS sağlamak için kaynak içinde bu kod kullanmaktır. Bunu, @GET'iniz olduğu sınıfa koyun.
@OPTIONS 
    @Path("/getsample") 
    public Response getOptions() { 
    return Response.ok() 
     .header("Access-Control-Allow-Origin", "*") 
     .header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS") 
     .header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With").build(); 
    } 


bu işin sigara, Bu kaynağa erişmek için özel alan adı ile "Erişim-Control-Allow-Origin" başlığının öngörülen "*" alışverişinde çalışırsanız

. I.g. Bunu http://localhost::8080'dan çağırırsanız, "*" yıldız işareti yerine ("Access-Control-Allow-Origin", "http://localhost:8080") gibi bir şey kullanın.

+0

IE üzerinde çalışan bu değişiklik, kromda hala çalışmıyor – ChiranjeeviIT

+0

güncelleştirildi. İki numaralı yayınlanmış çözümü dene. – flyer

+0

uzun bir araştırmadan sonra, çözümünüz daha iyi ve iyi görünüyor, cevabınız için teşekkürler, kalıcı bir çözüm bulursanız beni güncel tutun. – ChiranjeeviIT