CORS a JAX-RS-ben

1. Áttekintés

Ebben a rövid cikkben megtudhatjuk, hogyan lehet engedélyezni a CORS-t (Cross-Origin erőforrásmegosztás) a JAX-RS alapú rendszer. A tetején létrehozunk egy alkalmazást JAX-RS engedélyezni CORS gépezet.

2. Hogyan lehet engedélyezni a CORS mechanizmust

Kétféle módon engedélyezhetjük a CORS-ot a JAX-RS-ben. Az első és a legalapvetőbb módszer egy szűrő létrehozása, amely a szükséges válaszfejléceket futás közben injektálja minden kérésbe. A másik az, hogy manuálisan hozzáadunk egy megfelelő fejlécet az egyes URL-végpontokhoz.

Ideális esetben az első megoldást kell használni; azonban ha ez nem opció, akkor a manuálisabb opció is technikai ok.

2.1. A Szűrő használata

JAX-RS rendelkezik a ContainerResponseFilter interfész - a tároló válaszszűrői valósítják meg. Általában ezt a szűrőpéldányt globálisan alkalmazzák bármely HTTP válaszra.

Ezt a kezelőfelületet egy egyéni szűrő létrehozására fogjuk használni, amely beadja az injekciót Belépés-vezérlés-Engedélyezés * fejlécet minden kimenő kéréshez, és engedélyezze a CORS gépezet:

A @Provider public class CorsFilter végrehajtja a ContainerResponseFilter {@Override public void filter (ContainerRequestContext requestContext, ContainerResponseContext responseContext) dobja az IOException {responseContext.getHeaders (). Add ("Access-Control-Allow-Origin" responseContext.getHeaders (). add ("Access-Control-Allow-Credentials", "true"); responseContext.getHeaders (). add ("Access-Control-Allow-Headers", "eredet, tartalomtípus, elfogadás, engedélyezés"); responseContext.getHeaders (). add ("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); }}

Néhány pont itt:

  • Szűrők megvalósítása ContainerResponseFilter kifejezetten meg kell jegyezni @ Szolgáltató hogy a JAX-RS futásideje felfedezze
  • InjektálunkBelépés-vezérlés-Engedélyezés *’Fejléc’ * -gal, ez azt jelenti, hogy a kiszolgálópéldányhoz tartozó bármely URL-végpont bármely tartományon keresztül elérhető; ha kifejezetten korlátozni akarjuk a domainek közötti hozzáférést, akkor ezt a tartományt meg kell említenünk ebben a fejlécben

2.2. Fejléc-módosítás használata az egyes végpontokban

Amint azt korábban említettük, kifejezetten beadhatjuk aBelépés-vezérlés-Engedélyezés *’Fejléc a végpont szintjén is:

@GET @Path ("/") @Produces ({MediaType.TEXT_PLAIN}) nyilvános válaszindex () {return Response .status (200) .header ("Access-Control-Allow-Origin", "*"). Header ("Access-Control-Allow-Credentials", "true") .header ("Access-Control-Allow-Headers", "origó, tartalomtípus, elfogadás, engedélyezés") .header ("Access-Control-Allow- Methods "," GET, POST, PUT, DELETE, OPTIONS, HEAD ") .entity (" ") .build (); }

Itt érdemes megjegyezni, ha megpróbáljuk engedélyezni CORS egy nagy alkalmazásban nem szabad kipróbálni ezt a módszert, mert ebben az esetben manuálisan kell beadnunk a fejlécet minden URL-végpontba, ami további általános költségeket jelent.

Ez a technika azonban alkalmazható olyan alkalmazásokban, ahol engedélyeznünk kell CORS csak néhány URL-végpontban.

3. Tesztelés

Miután az alkalmazás elindult, tesztelhetjük a fejléceket a curl parancsokkal. A minta fejlécek kimenetének valami hasonlónak kell lennie:

HTTP / 1.1 200 OK Dátum: 2014. május 13., kedd, 12:30:00 GMT-kapcsolat: életben tartani a Belépés-Ellenőrzés-Engedélyezés-Eredet: * Belépés-Ellenőrzés-Engedélyezés-Hitelesítő adatok: Igazi Belépés-Ellenőrzés-Engedélyezés-Fejlécek: eredet , tartalomtípus, elfogadás, engedélyezés Hozzáférés-vezérlés-Engedélyezési módszerek: GET, POST, PUT, DELETE, OPTIONS, HEAD Transfer-Encoding: chunked

Mi több, létrehozhatunk egy egyszerű AJAX funkciót, és ellenőrizhetjük a tartományok közötti funkcionalitást:

függvényhívás (url, type, data) {var request = $ .ajax ({url: url, method: "GET", data: (data)? JSON.stringify (data): "", dataType: type}); request.done (function (resp) {console.log (resp);}); request.fail (function (jqXHR, textStatus) {console.log ("A kérés nem sikerült:" + textStatus);}); };

Természetesen az ellenőrzés tényleges elvégzéséhez ezt más eredetről kell futtatnunk, mint az általunk használt API-t.

Ezt helyi szinten meglehetősen egyszerűen megteheti, ha egy kliens alkalmazást külön porton futtat - mivel a kikötő valóban meghatározza az eredetet.

4. Következtetés

Ebben a cikkben bemutattuk a megvalósítást CORS mechanizmus a JAX-RS alapú alkalmazásokban.

Mint mindig, a teljes forráskód is elérhető a GitHubon.