Междоменные веб-сервисы REST / Джерси с CORS - PullRequest
4 голосов
/ 29 марта 2012

Я хочу создать кросс-доменные REST-сервисы с CORS (Cross-Origin Resource Sharing).Я использую библиотеки Джерси для предоставления услуг.

Мне нужно знать

  1. Какие изменения кода / конфигурации мне нужно сделать с точки зрения сервера?

  2. Как вызвать эти сервисы из HTML5 / js.

Спасибо

Ответы [ 3 ]

9 голосов
/ 29 марта 2012

Всю информацию для конфигурации вашего сервера можно найти по адресу enable-cors.org .

Нет необходимости изменять код на стороне клиента, но я бы порекомендовал проверить браузеры.возможность для CORS перед его использованием.Код тестирования можно найти, например, здесь .

5 голосов
/ 15 ноября 2012

Я решил решить эту проблему, предоставив ответ CORS сервера на уровне контейнера в Джерси.Это может предложить больше удобства для некоторых приложений, поскольку может применяться ко всем ответам из контейнера без изменения кода обработки ресурсов.

Сначала необходимо создать фильтр ответа контейнера, который будет вставлять соответствующие заголовки.Например, для контейнера, который указывает Access-Control-Allow-Origin: * для любого ответа:

class CORSFilter implements ContainerResponseFilter {
    @Override
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
        response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
        return response;
    }       
}

Затем необходимо добавить фильтр, чтобы добавить его в цепочку фильтров ответа Джерси.Это можно сделать через конфигурацию ресурса, используемую для приложения.

...
DefaultResourceConfig rc = new ClasspathResourceConfig();
rc.getContainerResponseFilters().add(new CORSFilter());

// now create a simple lightweight server using this resource config.
HttpServer server = HttpServerFactory.create(uri,rc);
...
0 голосов
/ 13 декабря 2014

Шаги, которые я использовал для включения CORS Filter в моем встроенном приложении Jetty на базе Джерси.

версия джет-сервлета - 2.12

  1. Добавлена ​​зависимость фильтра cors в pom
      <dependency>
       <groupId>com.thetransactioncompany</groupId>
       <artifactId>cors-filter</artifactId>
       <version>2.1.2</version>
      </dependency>
Добавьте corsfilter в ServletContextHandler вашего приложения.

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); 

context.addFilter(CORSFilter.class, "/*", EnumSet.of(DispatcherType.INCLUDE,DispatcherType.REQUEST)); 

server.setHandler(context);//set handle to your server
...