2013-06-24 2 views
0
Ubuntu 12.10 
Tomcat 7.0.41 
Chrome 27.0.1453.116 

Я хотел бы использовать новый, родной CORS фильтр Tomcat, чтобы позволить Access-Control-Allow-Origin: *. Конфигурация кажется достаточно простым, но, когда я использую «Инструменты разработчика» Chrome или Firefox»Firebug для проверки Access-Control-Allow-Origin: *, он не отображается в заголовке ответа:7 CORS кот фильтр

Request URL:http://XXX.XXX.XX.99:8984/SimpleServlet/simple-servlet 
Request Method:GET 
Status Code:200 OK 
Request Headersview source 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0  
Connection:keep-alive  
DNT:1  
Host:198.100.45.99:8984  
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36  
Response Headersview source 
Content-Length:103  
Content-Type:text/html;charset=ISO-8859-1  
Date:Mon, 24 Jun 2013 00:19:30 GMT  
Server:Apache-Coyote/1.1  

Для тестирование, я развернул простой сервлет и настроил следующее в WEB-INF/web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3.0.xsd" 
    version="3.0"> 
    <servlet> 
     <servlet-name>SimpleServlet</servlet-name> 
     <servlet-class>com.javaranch.codebarn.servletjsp.SimpleServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>SimpleServlet</servlet-name> 
     <url-pattern>/simple-servlet</url-pattern>  
    </servlet-mapping> 
    <filter>  
     <filter-name>CorsFilter</filter-name>  
     <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>  
     <init-param>  
      <param-name>cors.allowed.origins</param-name>  
      <param-value>*</param-value>  
     </init-param>  
     <init-param>  
      <param-name>cors.allowed.headers</param-name>  
      <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>  
     </init-param>  
     <init-param>  
      <param-name>cors.exposed.headers</param-name>  
      <param-value>Access-Control-Allow-Origin</param-value>  
     </init-param>  
     <!--  
     <init-param>  
      <param-name>cors.logging.enabled</param-name>  
      <param-value>true</param-value>  
     </init-param>  
     -->  
    </filter>  
    <filter-mapping>  
     <filter-name>CorsFilter</filter-name>  
     <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app> 

Что мне не хватает? Я также попробовал java классы/фильтр Juvinov's и попытался настроить фильтр в WEB-INF/web.xml и $ CATALINA_BASE/conf/web.xml. Что может блокировать эту конфигурацию?

Как устранить эту проблему? Похоже, что в исходном предложении eBay cors-filter был параметр для переключения журнала, но это не отражено в документации Tomcat v7.0.41.

+0

Можете ли вы предоставить заголовки запросов? Первое, что я хотел бы сделать, это проверить, добавляет ли браузер заголовок «Origin» для запроса. Согласно спецификации, когда браузеры обнаруживают, что запрос является запросом на перекрестный исход, они добавляют заголовок «Origin». Если запрос не содержит заголовок «Origin», CorsFilter будет передавать запрос. – mohitsoni

+0

Если браузер не добавляет заголовок «Origin» для запроса, это означает, что запрос не является запросом на перекрестный поиск. – mohitsoni

+1

Возможно, вы захотите проверить, действительно ли запрос является запросом на перекрестный поиск. Например: если страница отправлена ​​в начале 'http: // localhost: 8080', тогда она должна делать запрос к любому происхождению, а' http: // localhost: 8080' (для запроса - перекрестное происхождение). Чтобы имитировать, вы можете отредактировать свой/etc/hosts и сопоставить «127.0.0.1» с ex: 'localhost.cors'. Затем измените свой JavaScript, чтобы сделать запрос на 'http: //localhost.cors: 8080' со страницы, которая была отправлена ​​с' http: // localhost: 8080' (или наоборот). – mohitsoni

ответ

1

Проблема не была в конфигурации фильтра web.xml; скорее, это было так, как были измерены результаты теста. Вместо использования инструментов разработчика Chrome используйте test-cors.org (http://client.cors-api.appspot.com/client). См. Также https://groups.google.com/forum/#!topic/gs-discussion/kgdCFuJoTt4.

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