CORS u JAX-RS

1. Pregled

U ovom ćemo kratkom članku naučiti kako omogućiti CORS (Dijeljenje resursa s više podrijetla) u JAX-RS zasnovan sustav. Postavit ćemo aplikaciju povrh JAX-RS kako bi se omogućilo KORUZI mehanizam.

2. Kako omogućiti CORS mehanizam

Postoje dva načina na koje možemo omogućiti CORS u JAX-RS. Prvi i najosnovniji način je stvoriti filtar za ubrizgavanje potrebnog zaglavlja odgovora u vrijeme izvođenja u svaki zahtjev. Drugi je ručno dodavanje odgovarajućeg zaglavlja u svaku krajnju točku URL-a.

Idealno bi bilo koristiti prvo rješenje; međutim, kada to nije opcija, ručnija opcija je također tehnički u redu.

2.1. Korištenje filtra

JAX-RS ima ContainerResponseFilter sučelje - implementirano filtrima odgovora spremnika. Obično se ova instanca filtra primjenjuje globalno na bilo koji HTTP odgovor.

Implementirat ćemo ovo sučelje za stvaranje prilagođenog filtra koji će ubrizgati Access-Control-Allow- * zaglavlje svakog odlaznog zahtjeva i omogućite KORUZI mehanizam:

Javna klasa @Provider CorsFilter implementira ContainerResponseFilter {@Override javni void filter (ContainerRequestContext requestContext, ContainerResponseContext responseContext) baca IOException {responseContext.getHeaders (). Add ("Access-Origin-Control-Allow; responseContext.getHeaders (). add ("Access-Control-Allow-Credentials", "true"); responseContext.getHeaders (). add ("Access-Control-Allow-Headers", "ishodište, vrsta sadržaja, prihvaćanje, autorizacija"); responseContext.getHeaders (). add ("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); }}

Nekoliko točaka ovdje:

  • Implementacija filtara ContainerResponseFilter mora biti izričito označeno s @Provider koji će otkriti izvršavanje JAX-RS
  • UbrizgavamoAccess-Control-Allow- *„Zaglavlje s„ * “, što znači da se bilo kojim URL-om krajnjih točaka ovog poslužitelja može pristupiti putem bilo koje domene; ako želimo eksplicitno ograničiti pristup više domena, tu domenu moramo spomenuti u ovom zaglavlju

2.2. Korištenje izmjene zaglavlja u svakoj krajnjoj točki

Kao što je ranije rečeno, možemo izričito ubrizgatiAccess-Control-Allow- *'Zaglavlje i na razini krajnje točke:

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

Ovdje valja napomenuti ako pokušavamo omogućiti KORUZI u velikoj aplikaciji ne bismo trebali isprobati ovu metodu, jer u ovom slučaju moramo ručno ubrizgati zaglavlje u sve krajnje točke URL-a što će uvesti dodatne troškove.

Međutim, ova se tehnika može koristiti u aplikacijama, gdje to moramo omogućiti KORUZI samo u nekim krajnjim točkama URL-a.

3. Ispitivanje

Nakon što aplikacija završi, možemo testirati zaglavlja pomoću naredbi curl. Izlaz zaglavlja uzorka trebao bi biti nešto poput dolje:

HTTP / 1.1 200 OK Datum: utorak, 13. svibnja 2014. 12:30:00 GMT Veza: održivi pristup Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: origin , vrsta sadržaja, prihvati, autorizacija Pristup-kontrola-dozvoli-metode: GET, POST, STAVI, BRISI, OPCIJE, GLAVA Prijenos-kodiranje: komadano

Štoviše, možemo stvoriti jednostavnu AJAX funkciju i provjeriti funkcionalnost više domena:

poziv funkcije (url, vrsta, podaci) {var request = $ .ajax ({url: url, method: "GET", data: (data)? JSON.stringify (data): "", dataType: type}); request.done (function (resp) {console.log (resp);}); request.fail (funkcija (jqXHR, textStatus) {console.log ("Zahtjev nije uspio:" + textStatus);}); };

Naravno, da bismo stvarno izvršili provjeru, morat ćemo pokrenuti ovo na različitom izvoru od API-ja koji trošimo.

To možete učiniti lokalno prilično jednostavno pokretanjem klijentske aplikacije na zasebnom portu - budući da luka ipak određuje podrijetlo.

4. Zaključak

U ovom smo članku prikazali provedbu KORUZI mehanizam u aplikacijama temeljenim na JAX-RS.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.


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