【问题标题】:No 'Access-Control-Allow-Origin' header is present on .... Origin 'null' is therefore not allowed access... 上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'
【发布时间】:2016-04-12 18:55:06
【问题描述】:

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

未捕获的引用错误:$http 未定义 index.html:1 XMLHttpRequest 无法加载http://192.168.200.85:8080/Test/webapi/GetCustomerProfile?accountNo=81701。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin '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();
    }

    }

谁能帮我解决这个问题?

【问题讨论】:

    标签: java tomcat7


    【解决方案1】:

    添加此代码:

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

    另一种解决方案(创建类实现 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>
    

    【讨论】:

    • 您的解决方案对我有用,但您的捐赠解决方案中缺少一些东西。工作代码是 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") .status(200).entity(outPut).build();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2014-03-13
    • 2016-05-27
    • 2018-07-06
    • 2013-12-24
    • 2018-10-23
    相关资源
    最近更新 更多