如何在CORS中使用ActiveMQ AJAX servlet?

时间:2015-01-16 07:36:05

标签: activemq

如果我有一个连接到删除Active MQ服务器的Web应用程序,如何启用CORS以允许跨域通信?

2 个答案:

答案 0 :(得分: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之类的标题,这是不允许的),但是一个小的修复(用setHeader替换addHeader)就是使它工作所需的全部内容。有关固定代码,请参阅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过滤器和更新的jQuery ajax请求设置,您将能够向AJAX servlet发出CORS请求。

答案 1 :(得分:0)

似乎这种与立场的设定方式对我不起作用。我使用了jetty CORS servlet,并以这种方式设置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>