CORS v JAX-RS

1. Prehľad

V tomto článku sa dozvieme, ako povoliť CORS (Zdieľanie zdrojov medzi krajinami) v JAX-RS založený systém. Aplikáciu nastavíme navrch JAX-RS umožniť CORS mechanizmus.

2. Ako povoliť mechanizmus CORS

Existujú dva spôsoby, ako môžeme povoliť CORS v JAX-RS. Prvým a najzákladnejším spôsobom je vytvoriť filter na vloženie potrebnej hlavičky odpovede za behu pri každej požiadavke. Druhou je manuálne pridanie príslušnej hlavičky do každého koncového bodu adresy URL.

V ideálnom prípade by sa malo použiť prvé riešenie; keď to však nie je možné, je aj manuálnejšia možnosť v poriadku.

2.1. Používanie filtra

JAX-RSContainerResponseFilter rozhranie - implementované filtrami odozvy kontajnera. Táto inštancia filtra sa zvyčajne aplikuje globálne na každú odpoveď HTTP.

Toto rozhranie implementujeme do vytvorenia vlastného filtra, ktorý sa vloží Access-Control-Allow- * hlavičku každej odchádzajúcej požiadavky a povoľte CORS mechanizmus:

@Provider verejná trieda CorsFilter implementuje ContainerResponseFilter {@Override public void filter (ContainerRequestContext requestContext, ContainerResponseContext responseContext) hodí IOException {responseContext.getHeaders (). Add ("Access-Control-Allow-Origin", "*") responseContext.getHeaders (). add ("Access-Control-Allow-Credentials", "true"); responseContext.getHeaders (). add ("Access-Control-Allow-Headers", "origin, content-type, accept, authorized"); responseContext.getHeaders (). add ("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); }}

Pár bodov tu:

  • Implementácia filtrov ContainerResponseFilter musí byť výslovne anotovaný s @ Poskytovateľ byť objavený runtime JAX-RS
  • Vstrekujeme ‘Access-Control-Allow- *„Hlavička s„ * “, to znamená, že k ľubovoľným koncovým bodom adresy URL tejto inštancie servera je možné získať prístup z ktorejkoľvek domény; ak chceme výslovne obmedziť prístup medzi doménami, musíme túto doménu spomenúť v tejto hlavičke

2.2. Použitie úpravy hlavičky do každého koncového bodu

Ako už bolo uvedené, môžeme explicitne vložiť „Access-Control-Allow- *„Hlavička aj na úrovni koncového bodu:

@GET @Path ("/") @Produces ({MediaType.TEXT_PLAIN}) public Response index () {return Response .status (200) .header ("Access-Control-Allow-Origin", "*") .header ("Access-Control-Allow-Credentials", "true") .header ("Access-Control-Allow-Headers", "origin, content-type, accept, authorized") .header ("Access-Control-Allow-Headers" Methods "," GET, POST, PUT, DELETE, OPTIONS, HEAD ") .entity (" ") .build (); }

Tu je potrebné poznamenať, ak sa pokúšame povoliť CORS vo veľkej aplikácii by sme túto metódu nemali skúšať, pretože v tomto prípade musíme ručne vložiť hlavičku do každého koncového bodu adresy URL, čo prinesie ďalšiu réžiu.

Túto techniku ​​je však možné použiť v aplikáciách, kde to musíme povoliť CORS iba v niektorých koncových bodoch adresy URL.

3. Testovanie

Keď je aplikácia hore, môžeme hlavičky testovať pomocou príkazov zvlnenia. Výstup ukážkových hlavičiek by mal byť asi taký, ako je uvedený nižšie:

HTTP / 1.1 200 OK Dátum: Utorok, 13. mája 2014 12:30:00 GMT Pripojenie: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: origin , typ obsahu, prijať, autorizácia Metódy riadenia prístupu: Povoliť: ZÍSKAŤ, POST, PUT, ODSTRÁNENIE, MOŽNOSTI, Kódovanie prenosu HEAD: blok

Navyše môžeme vytvoriť jednoduchú funkciu AJAX a skontrolovať funkčnosť viacerých domén:

volanie funkcie (url, type, data) {var request = $ .ajax ({url: url, method: "GET", data: (data)? JSON.stringify (data): "", dataType: type}); request.done (funkcia (resp) {console.log (resp);}); request.fail (function (jqXHR, textStatus) {console.log ("Žiadosť zlyhala:" + textStatus);}); };

Samozrejme, aby sme kontrolu mohli skutočne vykonať, budeme ju musieť spustiť na inom pôvode ako API, ktoré spotrebúvame.

Môžete to urobiť lokálne celkom ľahko spustením klientskej aplikácie na samostatnom porte - pretože port určuje pôvod.

4. Záver

V tomto článku sme si ukázali o implementácii CORS mechanizmus v aplikáciách založených na JAX-RS.

Celý zdrojový kód je ako vždy k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found