如何将ActiveMQ AJAX servlet与CORS一起使用?

如何将ActiveMQ AJAX servlet与CORS一起使用?,activemq,Activemq,如果我有一个web应用程序连接到一个remove Active MQ服务器,我如何使CORS允许跨域通信?这花了我很长时间才解决,并不明显,因此我将在这里记录更改。这是通过ActiveMQ 5.10完成的 首先,您需要一个CORS过滤器来将适当的头添加到响应中。我尝试使用内置的Jetty cors过滤器(),但我感觉它没有正确响应飞行前选项请求。然而,还有第二个问题阻碍了我的CORS连接,所以不要相信我的话,Jetty CORS过滤器不起作用(我放弃了它,不再尝试) 相反,我使用了过滤器。请注意

如果我有一个web应用程序连接到一个remove Active MQ服务器,我如何使CORS允许跨域通信?

这花了我很长时间才解决,并不明显,因此我将在这里记录更改。这是通过ActiveMQ 5.10完成的

首先,您需要一个CORS过滤器来将适当的头添加到响应中。我尝试使用内置的Jetty cors过滤器(),但我感觉它没有正确响应飞行前选项请求。然而,还有第二个问题阻碍了我的CORS连接,所以不要相信我的话,Jetty CORS过滤器不起作用(我放弃了它,不再尝试)

相反,我使用了过滤器。请注意,该库的2.2.1版不起作用(它复制了诸如Access Control Allow Origin之类的头,这是不允许的),但是一个小的修复程序(将addHeader替换为setHeader)是使它起作用的全部步骤。有关固定代码,请参阅

现在需要更新amq_jquery_adapter.js文件,以包含xhrFields with credentials字段(请参阅)。代码如下所示:

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请求。

似乎这种使用Credentals设置的方式对我不起作用。我使用jetty CORS servlets,并以这种方式设置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>

交叉起源
org.eclipse.jetty.servlets.CrossOriginFilter
允许起源
*
允许的方法
获取、发布、头部、选项
允许的标题
X-request-With,内容类型,接受,来源
允许的证书
真的
交叉起源
/*