RESTful webservice:如何在java中设置头文件以接受Access-Control-Allow-Origin允许的XMLHttpRequest

我有一个RESTful webservice,它将返回字符串,它是用Java(JAX-WS)编写的。 我的问题是当我使用以下URL向该webservice发送请求时:

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

在控制台中,它给出了以下错误消息:

XMLHttpRequest无法加载url Access-Control-Allow-Origin不允许使用origin localhost

我该如何处理这个问题?

Java代码:

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

在这里阅读有关您的问题CORS: http : //enable-cors.org/

检查这个是否可以帮助您使用getMsg()方法:
return Response.ok(output).header("Access-Control-Allow-Origin", "*").build();

如果上述方法无效,请尝试将Jerseyfilter添加到您的服务中。 创建filter类:

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

并注册以后赢取web.xml:

  CORS Filter com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.spi.container.ContainerResponseFilters your.package.CORSFilter    CORS Filter /webservices/*  

另一种解决方案是在资源中使用此代码为浏览器提供OPTIONS 。 把它放在你拥有@GET的class级里。

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

如果不是这项工作,请尝试将“Access-Control-Allow-Origin”标题提供的"*"与您访问此资源的自定义域交换。 Ig如果你从http://localhost::8080调用它,请使用类似这样的东西("Access-Control-Allow-Origin", "http://localhost:8080")而不是星号"*"