Saya menanyakan hal yang sama, jadi setelah sedikit riset saya menemukan bahwa cara termudah adalah dengan menggunakan JAX-RS ContainerResponseFilter
untuk menambahkan header CORS yang relevan. Dengan cara ini Anda tidak perlu mengganti seluruh tumpukan layanan web dengan CXF (Wildfly menggunakan CXF dalam beberapa bentuk, tetapi sepertinya tidak menggunakannya untuk JAX-RS mungkin hanya JAX-WS).
Terlepas jika Anda menggunakan filter ini, filter ini akan menambahkan header ke setiap layanan web REST.
package com.yourdomain.package;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(final ContainerRequestContext requestContext,
final ContainerResponseContext cres) throws IOException {
cres.getHeaders().add("Access-Control-Allow-Origin", "*");
cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
cres.getHeaders().add("Access-Control-Max-Age", "1209600");
}
}
Kemudian ketika saya menguji dengan curl, responnya memiliki header CORS:
$ curl -D - "http://localhost:8080/rest/test"
HTTP/1.1 200 OK
X-Powered-By: Undertow 1
Access-Control-Allow-Headers: origin, content-type, accept, authorization
Server: Wildfly 8
Date: Tue, 13 May 2014 12:30:00 GMT
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Transfer-Encoding: chunked
Content-Type: application/json
Access-Control-Max-Age: 1209600
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
Pemahaman saya adalah anotasi @Provider
yang memberitahu runtime JAX-RS untuk menggunakan filter, tanpa anotasi tidak ada yang terjadi.
Saya mendapat ide tentang penggunaan ContainerResponseFilter
dari Contoh jersey.
person
Joel Pearson
schedule
13.05.2014