……上没有 'Access-Control-Allow-Origin' header。因此不允许访问来源 'null'

No 'Access-Control-Allow-Origin' header is present on .... Origin 'null' is therefore not allowed access

我正在调用部署在另一台 tomcat 服务器上的网络服务。我收到以下错误:

未捕获的引用错误:未定义 $http index.html:1 XMLHttpRequest 无法加载 http://192.168.200.85:8080/Test/webapi/GetCustomerProfile?accountNo=81701。对预检请求的响应未通过访问控制检查:请求的资源上不存在 'Access-Control-Allow-Origin' header。因此不允许访问来源 'null'。

以下是我的网络服务代码:

 import com.ef.wrapupcodes.Skills.ServiceData;

 package com.ef.wrapupcodes;

 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.GenericEntity;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;

 import com.ef.wrapupcodes.Skills.ServiceData;

   @Path("/services/{serviceName}")
   public class GetSG
   {
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   public Response  GetSkillGroups(@PathParam ("serviceName") String serName)
   {    
    Skills services = new Skills(serName);
    ServiceData list = services.getServices(); 
    final GenericEntity<ServiceData> outPut = 
     new GenericEntity<ServiceData>       (list) { };

    return Response.ok()
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, OPTIONS")
            .status(200).entity(outPut).build();
    }

    }

谁能帮我解决这个问题?

添加此代码:

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

另一个解决方案(创建 class 实施 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

<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>/service/*</url-pattern>
</servlet-mapping>