Мне было интересно то же самое, поэтому после небольшого исследования я обнаружил, что самым простым способом было просто использовать JAX-RS ContainerResponseFilter
для добавления соответствующих заголовков CORS. Таким образом, вам не нужно заменять весь стек веб-сервисов на CXF (Wildfly использует CXF в какой-то форме, но не похоже, что он использует его для JAX-RS, возможно, только для JAX-WS).
Независимо от того, используете ли вы этот фильтр, он добавит заголовки к каждому веб-сервису 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");
}
}
Затем, когда я тестировал curl, в ответе были заголовки 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
Насколько я понимаю, это аннотация @Provider
, которая указывает среде выполнения JAX-RS использовать фильтр, без аннотации ничего не происходит.
Я получил идею об использовании ContainerResponseFilter
из Пример футболки.
person
Joel Pearson
schedule
13.05.2014