2013-04-18 11 views
6

Devo implementare il supporto CORS nel server REST basato su Jersey. Ho esaminato alcuni dei dati disponibili material e informativo tutorials. Ho trovato due approcci la gente sta usando:CORS Implementazione lato server Java

Approccio-1:

approccio semplice e diretto in cui implementare uno HTTP filtro che aggiunge CORS intestazione alla risposta (Jersey specifica)

public class ResponseCorsFilter implements ContainerResponseFilter { 

public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) { 

     ResponseBuilder resp = Response.fromResponse(contResp.getResponse()); 
     resp.header("Access-Control-Allow-Origin", "*") 
       .header("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 

     String reqHead = req.getHeaderValue("Access-Control-Request-Headers"); 

     if(null != reqHead && !reqHead.equals(null)){ 
      resp.header("Access-Control-Allow-Headers", reqHead); 
     } 

     contResp.setResponse(resp.build()); 
      return contResp; 
    } 
} 

Approach-2:

Completamente attuare CORS come per le sue specifiche, vale a dire la gestione delle richieste di preflight e il supporto di tutte le intestazioni. Codice sorgente ispezionato di una tale implementazione java open source cors-filter

La mia domanda è quale approccio dovrebbe essere presa quando? Quale potrebbe essere il lato negativo di approccio-1 vs approccio-2?

Il mio caso d'uso è tutte le origini/i metodi possono essere consentiti e l'intestazione HTTP Authorization fa parte di tutte le richieste REST. Sono propenso all'approccio 1 in quanto sembra che la maggior parte delle impostazioni CORS predefinite siano sufficienti per il mio caso d'uso, ma non sono sicuro che se non avessi le specifiche complete CORS implementate sul lato server creerebbe qualsiasi problema.

risposta

1

Per i vostri scopi, l'approccio n. 1 suona sufficiente. L'approccio n. 2 è più per il caso in cui si hanno risposte diverse in base al tipo di richiesta o si desidera convalidare le informazioni sulla richiesta. Se la tua risposta è la stessa per tutti i tipi di richiesta, # 1 dovrebbe andare bene. Nota che poiché la tua implementazione sta sostanzialmente permettendo a tutte le richieste di avere successo, dovresti fare i tuoi stessi controlli per assicurarti che la richiesta sia valida. Dal momento che stai consentendo l'intestazione Autorizzazione, presumo che tu ne sia a conoscenza e stai convalidando il token di autorizzazione?

+0

grazie per la tua risposta, sì ogni richiesta dovrebbe essere etichettato con un token pubblico memorizzato in intestazione di autorizzazione quale server sul ricevente convalida prima di fare qualsiasi elaborazione. – harsh