2015-09-02 3 views
0

У меня есть веб-сервис, из которого я получаю доступ из нескольких доменов. По причинам, которые я не могу понять, сеанс, похоже, разделяется между разными сайтами.CORS из нескольких источников

  1. Итак, я делаю запрос от WebAppA к API. Это работает.
  2. Затем я делаю тот же запрос от WebAppB к той же веб-службе. Это сообщает, что он заблокирован из-за политики 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, которые выглядят как релевантные.

Вопрос Как исправить это, чтобы оба веб-клиента A и B могли обращаться к одной и той же веб-службе, не очищая кеш между ними?

Отказ от ответственности: Это продолжение от Possible CORS issue. What's going on and how can I fix it?, но я провел намного больше исследований, так как я могу более четко определить проблему. (Я надеюсь).

ответ

2

Я подозреваю ошибку в org/intermine/webservice/server/WebService.java. Это говорит

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

Параметры метода (ЦСИ, по умолчанию) поставляются в неправильном порядке, что приводит к тому, сервер всегда возвращает значение по умолчанию в «Access-Control-Allow-Origin», вместо того, чтобы рассматривать фактический текущий запрос ...

Смежные вопросы