2015-01-16 2 views

ответ

0

Мне потребовалось некоторое время, чтобы разобраться, и это не очевидно, поэтому я буду документировать изменения здесь. Это было сделано с помощью ActiveMQ 5.10.

Сначала вам понадобится фильтр CORS, чтобы добавить соответствующие заголовки в ответы. Я попытался использовать встроенный фильтр Jetty cors (http://wiki.eclipse.org/Jetty/Feature/Cross_Origin_Filter), но у меня такое ощущение, что он не отвечал на запросы POST предполетного OPTION правильно. Тем не менее, была вторая проблема, которая мешала моим соединениям CORS, поэтому не забудьте, что фильтр Jetty CORS не работает (я отказался от него и не пробовал снова).

Вместо этого я использовал фильтр по адресу http://software.dzhuvinov.com/cors-filter.html. Обратите внимание, что версия 2.2.1 этой библиотеки не работает (она дублирует заголовки, такие как Access-Control-Allow-Origin, что недопустимо), однако небольшое исправление (замена addHeader с помощью setHeader) - все, что нужно, чтобы заставить его работать , См. https://github.com/AutoGeneral/cors-filter для фиксированного кода.

Теперь вам необходимо обновить amq_jquery_adapter.js файл, чтобы включить xhrFields withCredentials поле (см CORS request - why are the cookies not sent?). Таким образом, код выглядит следующим образом:

ajax: function(uri, options) { 
    request = { 
     url: uri, 
     data: options.data, 
     success: options.success || function(){}, 
     error: options.error || function(){}, 
     xhrFields: { 
      withCredentials: true 
     } 
    } 

Так, с CORS фильтром и обновленные параметры запроса Ajax Jquery, вы будете иметь возможность сделать CORS запросы к сервлет AJAX.

0

Кажется, что этот способ настройки withCredentals не работает для меня. Я использовал сервлеты CORS для причалов и установил withCredentials таким образом, только тогда он начал работать: xhr.withCredentials = true;

А на стороне сервера в web.xml:

<filter> 
     <filter-name>cross-origin</filter-name> 
     <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-  class> 
     <init-param> 
     <param-name>allowedOrigins</param-name> 
     <param-value>*</param-value> 
     </init-param> 
     <init-param> 
     <param-name>allowedMethods</param-name> 
     <param-value>GET,POST,HEAD,OPTIONS</param-value> 
     </init-param> 
     <init-param> 
     <param-name>allowedHeaders</param-name> 
     <param-value>X-Requested-With,Content-Type,Accept,Origin</param-value> 
     </init-param> 
     <init-param> 
     <param-name>allowedCredentials</param-name> 
     <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>cross-origin</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
Смежные вопросы