2013-02-24 2 views
0

Я пытаюсь настроить приложение GWT для работы с другим серверным сервером (работает Tomcat 7.0.26).Не удается заставить приложение GWT работать с CORS, настроенным на Tomcat 7

Я следовал инструкциям с этого сайта и настроен CORS фильтр: http://software.dzhuvinov.com/cors-filter-installation.html

Я использовал пример GWT кода (Привет App), с этими изменениями:

  1. В GWT App я добавил этот линии, перед RPC вызова:

    ((ServiceDefTarget) greetingService).setServiceEntryPoint("http://remoteserver/testcors/greet"); 
    
  2. Я модифицированный web.xml и добавил CORS фильтра:

    <filter> 
         <!-- The CORS filter with parameters --> 
         <filter-name>CORS</filter-name> 
         <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    
         <!-- Note: All parameters are options, if ommitted CORS Filter will fall 
           back to the respective default values. --> 
         <init-param> 
           <param-name>cors.allowGenericHttpRequests</param-name> 
           <param-value>true</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.allowOrigin</param-name> 
           <param-value>*</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.allowSubdomains</param-name> 
           <param-value>false</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.supportedMethods</param-name> 
           <param-value>GET, HEAD, POST, OPTIONS</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.supportedHeaders</param-name> 
           <param-value>Content-Type, X-Requested-With</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.exposedHeaders</param-name> 
           <param-value>X-Test-1, X-Test-2</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.supportsCredentials</param-name> 
           <param-value>true</param-value> 
         </init-param> 
    
         <init-param> 
           <param-name>cors.maxAge</param-name> 
           <param-value>3600</param-value> 
         </init-param> 
    
    </filter> 
    
    <filter-mapping> 
         <!-- CORS Filter mapping --> 
         <filter-name>CORS</filter-name> 
         <url-pattern>/testcors/greet</url-pattern> 
    </filter-mapping> 
    

Если я получить доступ TestCORS приложения из «удаленный_сервера», все работает отлично, и я могу видеть эти заголовки добавили:

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Access-Control-Allow-Origin: http://remoteserver 
Access-Control-Allow-Credentials: true 
Access-Control-Expose-Headers: X-Test-2, X-Test-1 
Content-Encoding: gzip 
Content-Disposition: attachment 
Content-Type: application/json;charset=utf-8 
Content-Length: 214 
Date: Sun, 24 Feb 2013 15:12:42 GMT 

Но если доступ к тем же TestCORS GWT приложение работает на моем локальная машина (127.0.0.1:8888), я получаю эту ошибку:

заголовков запроса:

OPTIONS /testcors/greet HTTP/1.1 
Host: remoteserver 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: http://127.0.0.1:8888 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17 
Access-Control-Request-Headers: x-gwt-module-base, x-gwt-permutation, origin, content-type 
Accept: */* 
Referer: http://127.0.0.1:8888/TestCORS.html 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

заголовки отклика:

HTTP/1.1 403 Forbidden 
Server: Apache-Coyote/1.1 
Content-Type: text/plain;charset=ISO-8859-1 
Content-Length: 96 
Date: Sun, 24 Feb 2013 15:14:38 GMT 

Я попытался это разные браузеры (Chrome версии 24.0.1312.57, Safari 6.0.2 (8536.26.17), Firefox 18.0.2, Opera версии 12,14), и я получил то же самое ошибки, возвращаемый сервером - HTTP 403.

Я видел несколько людей, имеющих схожие проблемы, но я не смог найти решение:

Любая помощь очень ценится!

+0

На самом деле это работает, когда я пробовал это: [1]: http: // stackoverflow.com/questions/13983697/how-to-serve-gwt-static-files-from-a-cdn/13986592 # 13986592 [2]: https://code.google.com/p/gwtquery/wiki/Ajax#CORS_ % 28Cross_Origin_Resource_Sharing% 29 – Tomas

ответ

1

Я не использовал этот фильтр корса раньше, я предпочитаю простейший, например this.

Во всяком случае, в вашем случае, похоже, не настроен правильно заголовки GWT должен работать, ваше приложение посылает:

Access-Control-Request-Headers: x-gwt-module-base, x-gwt-permutation, origin, content-type 

Таким образом, конфигурация должна иметь:

<init-param> 
    <param-name>cors.supportedHeaders</param-name> 
    <param-value>x-gwt-module-base, x-gwt-permutation, origin, content-type</param-value> 
</init-param> 
+0

Я также получил его, используя фильтр CORS с этого сайта: – Tomas

0

Спасибо к Владимиру, я также получил фильтр CORS от этого веб-сайта для работы: http://software.dzhuvinov.com/cors-filter-installation.html

Я добавил дополнительные поддерживаемые заголовки в web.xml:

<init-param> 
    <param-name>cors.supportedHeaders</param-name> 
    <param-value>Content-Type, X-Requested-With, x-gwt-module-base, x-gwt-permutation, origin, content-type</param-value> 
</init-param> 
+0

Спасибо, проблема решена! – Tomas

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