我有一个可以从多个域访问的Web服务。由于我无法理解的原因,会话似乎在不同站点之间共享。
然后我从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.
但是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?的后续内容,但我已经做了很多调查,因此我可以更清楚地定义问题。 (我希望)。
答案 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;中返回默认值,而不是考虑实际的当前值请求...