java - 来自多个来源的 CORS

标签 java ajax tomcat cors intermine

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

  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.
    

但是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 header 可能是空白的。但如果是,那么它肯定不会说 WebAppB 不允许访问,因为它不会知道源是 WebAppB!?

清除缓存可以解决问题,因此它显然以某种方式与 session 相关,但我看不到任何看起来相关的 cookie。

问题我该如何解决这个问题,以便 webapp A 和 B 都可以访问相同的 web 服务,而无需清除两者之间的缓存?

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

最佳答案

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

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

方法参数(src,default)提供顺序错误,导致服务端总是在“Access-control-allow-origin”中返回一个默认值,而不考虑当前实际的请求...

关于java - 来自多个来源的 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354736/

相关文章:

java - JAR 文件中的 jaxb.properties

tomcat - 如何在我不修改的本地 mac 上运行多个支持应用程序 (tomcat)?

java - 如何在 wicket 应用程序中使用 tomcat 管理器中的 "Guessed User name"?

java - Eclipse 中 Gradle 任务的 Stacktrace 选项

java - 使用单例模式在 Java 中进行缓存

java - 解析月份不带前导 0 的日期

javascript - 使用通过元素事件处理程序传递的参数(this)

jquery - 获取有关事件 Ajax 请求的信息

ajax - 从 ubuntu 服务器向浏览器推送数据

java.lang.NoSuchMethodError : java. 语言.NoSuchMethodError