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.