来自多个来源的CORS

时间:2015-09-02 13:36:52

标签: java ajax tomcat cors intermine

我有一个可以从多个域访问的Web服务。由于我无法理解的原因,会话似乎在不同站点之间共享。

  1. 因此,我向WebAppA请求API。这很有效。
  2. 然后我从WebAppB向同一个Web服务发出相同的请求。这报告由于CORS策略而被阻止,例如

     The 'Access-Control-Allow-Origin' header has a value 'WebAppA' that is not equal to the supplied origin.  
     Origin 'WebAppB' is therefore not allowed access.
    
  3. 但是the Tomcat code for the web service声称它允许CORS:

    我的web.xml中有这个:

    <param-name>Access-Control-Allow-Origin</param-name>
    <param-value>*</param-value>
    

    ,这在处理请求的java类中:

    if (StringUtils.isNotBlank(origin)) {
         response.setHeader("Access-Control-Allow-Origin", origin);
    }
    

    逻辑上,这应该允许来自WebAppB的请求,但它仍然将WebAppA视为唯一允许的来源。鉴于上面的代码段,我想到的一个选项是Origin标题可能是空白的。但如果是,那么肯定不会说WebAppB不允许访问,因为它不会知道原点是WebAppB!

    清除缓存修复了问题,所以它显然与会话相关联,但我看不到任何看起来像是相关的cookie。

    问题如何解决这个问题,以便webapp A和B都可以访问同一个Web服务,而无需在中间清除缓存?

    免责声明:这是来自Possible CORS issue. What's going on and how can I fix it?的后续内容,但我已经做了很多调查,因此我可以更清楚地定义问题。 (我希望)。

1 个答案:

答案 0 :(得分:2)

我怀疑org / intermine / webservice / server / WebService.java中有错误。 它说

origin = StringUtils.defaultIfBlank(
                    webProperties.getProperty("ws.response.origin"),
                    request.getHeader("Origin"));

方法参数(src,default)以错误的顺序提供,这导致服务器始终在&#34; Access-control-allow-origin&#34;中返回默认值,而不是考虑实际的当前值请求...