Фильтр приводов Jetty Cross
Я сконфигурировал фильтр перекрестного происхождения Jetty, но я продолжаю получать следующую ошибку. Кто-нибудь знает, что не так, и как это исправить? Ниже сообщения об ошибке является мой дескриптор переопределения (т.е. Дополнительный web.xml)
Ошибка:
Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.
Обозначить дескриптор:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
</web-app>
Заголовок запроса
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:8090
Referer:http://localhost:8090/home
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0
Заголовок ответа
Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
Ответы
Ответ 1
Алоха,
Я тоже некоторое время боролся с этим и обнаружил, что окончательный node должен быть:
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
НЕ
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
Вот ссылка, которую я нашел, чтобы помочь мне: wiki.eclipse.org/Jetty/Feature/Cross_Origin_Filter
После того, как я обновил файл web.xml и перезапустил сервер причала, я смог выполнить запрос перекрестного домена с помощью jQuery ajax-вызовов.
Rob
Ответ 2
Я столкнулся с этим, когда делал вызовы crossdomain для веб-приложений, развернутых в GAE. Вы можете добавить явный заголовок к вашим сообщениям Servlet (s), например:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException
{
res.addHeader("Access-Control-Allow-Origin", "*");
...
}
а также убедитесь, что у вас есть файл политики crossdomain.xml в корневой части вашей WAR, например:
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="*"/>
</cross-domain-policy>
НТН.
Ответ 3
Для меня (jetty-версия 8.1.5.v20120716) только эти строки в 'web.xml' помогают:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
У меня есть уровень журнала изменений для DEBUG и получения информации (например, "GET, POST, DELETE, PUT, HEAD" и "origin, content-type, accept" ) из журнала консоли причала. Например:.
DEBUG CrossOriginFilter: 359 - Метод DELETE является одним из допустимых методов [GET, POST, DELETE, PUT, HEAD]
19: 14: 28413
DEBUG CrossOriginFilter: 389 - Заголовки [origin, content-type, accept] не входят в список разрешенных заголовков [*]
Затем я проверил результат с $.ajax({url: 'anotherHost', введите: "DELETE",..})
Ответ 4
У меня была та же проблема с ActiveMQ Ajax в Jetty Web Server. Моя проблема заключалась в том, что допустимые заголовки не принимают подстановочный знак в форме "*" .
Чтобы заставить ActiveMQ Ajax работать, мне также нужно добавить метод "Параметры" к разрешенным методам.
Фильтр поперечного происхождения из web.xml:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept, authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
Ответ 5
Просто открыл отчет об ошибке, потратив много времени:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=384847
Также помните о том, что символы в значениях параметров в основном не поддерживаются. (т.е. разрешенные заголовки)