2016-04-12 6 views
1

Ich rufe den Webservice an, der auf einem anderen Tomcat-Server bereitgestellt wird. Ich erhalte folgende Fehlermeldung:Nein 'Access-Control-Allow-Origin'-Header ist am ... vorhanden.' Null 'ist daher nicht erlaubt.

Uncaught ReferenceError: $ http ist nicht definiert index.html: 1 XMLHttpRequest kann nicht geladen werden http://192.168.200.85:8080/Test/webapi/GetCustomerProfile?accountNo=81701. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin 'null' ist daher nicht erlaubt.

folgende ist mein WebService Code:

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

    } 

kann jemand mir helfen, dieses Problem zu lösen?

Antwort

2

fügen Sie diesen Code:

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

eine andere Lösung (create-Klasse implementieren 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; 
    } 

in 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> 
+0

Ihre Lösung ist für mich arbeiten, aber es ist etwas fehlt in deiner gebenden Lösung. der Arbeitscode ist return Response.ok() \t \t \t .header ("Access-Control-Allow-Origin", "*") \t \t \t .header ("Access-Control-Allow-Methoden", " POST, GET, PUT, UPDATE, OPTIONS ") \t \t \t .header (" Access-Control-Allow-Header“, "Content-Type, annehmen, X-Requested-With") \t \t \t .status (200) .entity (outPut) .build(); – Touqeer

Verwandte Themen