Ce este Partajarea resurselor între origini (CORS) – Cum să o adaugi la serverul tău web Java Jersey?

Publicat: 2014-07-19

Partajarea resurselor între origini (CORS) Tutorial de Crunchify

Cum se remediază această eroare în timpul comunicării client-server ? Serverul trimite date în format JSON sau XML și clientul aruncă sub excepție.

Paginile web obișnuite pot folosi obiectul XMLHttpRequest pentru a trimite și a primi date de la servere la distanță, dar sunt limitate de aceeași politică de origine. Extensiile nu sunt atât de limitate. O extensie poate vorbi cu servere de la distanță în afara originii sale, atâta timp cât solicită mai întâi permisiuni între origini.

De asemenea, dacă aveți întrebări de mai jos, vă aflați în locația corectă:

  1. Înțelegerea partajării resurselor între origini (filtre CORS)
  2. Pot folosi Partajarea resurselor între origini
  3. Cum să activați partajarea resurselor între origini
  4. Ce este Ajax între domenii cu partajarea resurselor între origini
  5. Ce este controlul accesului HTTP (CORS)

CORS (Cross Origin Resource Sharing) este un mecanism suportat de W3C pentru a activa cererile de origine încrucișată în browserele web. CORS necesită suport atât de la browser, cât și de la server pentru a funcționa. Aceasta este o implementare a filtrului Java Jersey Web Server a CORS pe partea de server pentru containere web, cum ar fi Apache Tomcat și alte servere web încorporate.

Exemplu de server Crunchify CORSFilter Jersey

Pasul 1:

Un răspuns poate include un antet Access-Control-Allow-Origin, cu originea de unde provine cererea ca valoare, pentru a permite accesul la conținutul resursei. Agentul utilizator validează că valoarea și originea de unde a provenit cererea se potrivesc.

Pasul 2:

Agenții utilizatori pot descoperi printr-o solicitare preflight dacă o resursă cu origini încrucișate este pregătită să accepte cereri, utilizând o metodă non-simple, de la o anumită origine. Acest lucru este din nou validat de agentul utilizator.

Pasul 3:

Aplicațiile de pe partea serverului sunt activate pentru a descoperi că o solicitare HTTP a fost considerată o solicitare între origini de către agentul utilizator, prin antetul Origine. Această extensie permite aplicațiilor de pe partea serverului să impună limitări (de exemplu, să nu returneze nimic) cererilor de origine încrucișată pe care sunt dispuse să le dea servicii.

Acum să începem cu Exemple.

Exemplul-1: Server Web Java Jersey

Cu câteva săptămâni în urmă, am scris un articol despre Cum să porniți serverul Embedded HTTP Jersey în timpul pornirii aplicației Java. Această postare va acoperi pașii despre cum să adăugați filtrul CORS la același server Jersey.

Trebuie să extindem ContainerResponseFilter. Interfață implementată de filtrele de răspuns ale containerului. În mod implicit, adică dacă nu este aplicată nicio legătură de nume pentru clasa de implementare a filtrului, instanța de filtru este aplicată global oricărui răspuns de ieșire.

Pentru ca acest lucru să se remedieze, să încercăm să adăugăm mai jos 4 anteturi la răspunsul serverului:

  1. Acces-Control-Permite-Origine
  2. Acces-Control-Permite-Metode
  3. Acces-Control-Max-Age
  4. Acces-Control-Permite-anteturi

Cod filtru CORS:

Modificare în JerseyEmbeddedHTTPServerCrunchify.java din tutorialul anterior.

Doar adăugați linia de mai jos în createHttpServer() și reporniți serverul.

Rezultat:

http://localhost:8085/api

Antet de răspuns Crunchify cu filtru CORS

Iată detalii despre anteturi.

Antet de răspuns Crunchify fără filtru CORS

Exemplul-2: Apache HTTP Server

Pentru a expune antetul, puteți adăuga următoarea linie în secțiunile <Directory>, <Location> și <Files> sau într-un fișier .htaccess .

Exemplul-3: Serverul .NET poate configura acest lucru în web.config, după cum urmează

Exemplul-4: pentru Jetty (7 și mai sus)

Includeți JAR-ul de servlet-uri în WEB-INF/lib și îmbinați-l în WEB-INF/web.xml.

Exemplul-5: Server Apache Tomcat (v 7.0.41 +)

Exemplul-6: În PHP

Vă rog să-mi spuneți dacă mai aveți întrebări despre asta. Lista tuturor tutorialelor Java va fi găsită aici.