2016-04-14 7 views
2

Hata Ekran Görüntüsü:Jersey - uçuş öncesi isteğe yanıt erişim kontrollerine geçemezse: No 'Erişim-Control-Allow-Origin'

enter image description here

aşağıdaki benim API sınıfı hangi yazdım @OPTIONS yöntemi için kod.

@OPTIONS 
    public Response OptionsFirstRequst(){ 
     return Response.ok() 
     .header("Access-Control-Allow-Origin", "*") 
     .header("Access-Control-Allow-Methods", "*") 
     .header("Access-Control-Allow-Headers", "*").build(); 
    } 

Her bir istek için yanıt gönderdiğim Response Builder adlı bir sınıf oluşturdum.

public class ResponseBuilder { 

    public int status; 
    public HashMap data; 
    public String error; 

    public static Response ok(int Status_code, HashMap<String, String> data, String Response_error) { 
     if (data == null) { 
      data = new HashMap(); 
     } 

     ResponseBuilder response = new ResponseBuilder(); 
     response.status = Status_code; 
     response.data = data; 
     response.error = Response_error; 

     return Response.status(Status_code).entity(response) 
       .header("Access-Control-Allow-Origin", "*") 
       .header("Access-Control-Allow-Methods", "*") 
       .header("Access-Control-Allow-Headers", "*").build(); 
    } 

    public static Response error(int Status_code, HashMap<String, String> data, String Response_error) { 
     if (data == null) { 
      data = new HashMap(); 
     } 

     ResponseBuilder response = new ResponseBuilder(); 
     response.status = Status_code; 
     response.data = data; 
     response.error = Response_error; 
     response.data = new HashMap(); 

     return Response.status(Status_code).entity(response) 
       .header("Access-Control-Allow-Origin", "*") 
       .header("Access-Control-Allow-Methods", "*") 
       .header("Access-Control-Allow-Headers", "*").build(); 
    } 

} 

Ben de giriş haricinde her istek için belirteci doğrulayan bir istek filtresi vardır: aşağıdaki Tepki Oluşturucu sınıfı için kodudur.

Oturum açabiliyorum, oluşturucuyu oluşturabilir ve tarayıcıya geri verebiliyorum. Ancak profilin üzerine tıklarsam giriş yaptıktan sonra.

Yanıtı 200 olarak aldım (tarayıcının dev araçları ağında gösterildiği gibi), ancak hiçbir veri/doğru yanıt almıyorum.

Ve aşağıdaki hatayı alıyorum.

Ön kontrol isteğine yanıt, erişim denetimi denetimini geçmez: İstenen kaynağa 'Erişim Denetimi-İzin-Kökeni' başlığı yok.

cevap

2

CORS başlıklarını kontrol etmek ve eklemek için, genel bir çözüm javax.ws.rs.container.ContainerResponseFilter kullanmaktır. İşte izin kökenleri bir sınıfta ApplicationConfig.accessControlAllowedOrigins yapılandırılır bir örnek:

import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerResponseContext; 
import javax.ws.rs.container.ContainerResponseFilter; 
import javax.ws.rs.core.MultivaluedMap; 
import javax.ws.rs.ext.Provider; 
import java.io.IOException; 

@Provider 
public class ResponseCorsFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext, 
      ContainerResponseContext responseContext) throws IOException { 

     MultivaluedMap<String, Object> responseHeaders = responseContext.getHeaders(); 
     String origin = requestContext.getHeaderString("Origin"); 
     if (null != origin && 
      (ApplicationConfig.accessControlAllowedOrigins.contains(origin) || 
       ApplicationConfig.accessControlAllowedOrigins.contains("*"))) { 

      responseHeaders.putSingle("Access-Control-Allow-Origin", origin); 
      responseHeaders.putSingle("Access-Control-Allow-Methods", 
       "GET, POST, OPTIONS, PUT, DELETE, HEAD"); 

      String reqHead = requestContext.getHeaderString(
       "Access-Control-Request-Headers"); 

      if (null != reqHead && !reqHead.equals("")) { 
       responseHeaders.putSingle("Access-Control-Allow-Headers", reqHead); 
      } 
     } 
    } 
} 
+0

Ne 'ApplicationConfig.accessControlAllowedOrigins'' ApplicationConfig' içinde benziyor? – antogerva

+0

Access-Control-Allow-Origin öğesinin değerini içeren bir dizedir. Bakınız: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORSe.g. Bir Joker veya Tek bir URL veya URL'lerin virgülle ayrılmış listesi. –