Jetty Cross Origin Filter - PullRequest
       6

Jetty Cross Origin Filter

30 голосов
/ 29 ноября 2011

Я настроил перекрестный исходный фильтр 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)

Ответы [ 5 ]

25 голосов
/ 10 декабря 2011

Aloha,

Я тоже некоторое время боролся с этим и обнаружил, что последний узел должен быть:

<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 и перезапустил Jetty-сервер, я смог сделать междоменный запрос с использованием вызовов jQuery ajax.

Rob

12 голосов
/ 22 декабря 2011

Я столкнулся с этим при выполнении междоменных вызовов веб-приложений, развернутых в GAE.Вы можете добавить явный заголовок к вашим ответам сервлета (ов), например:

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> 

HTH.

6 голосов
/ 26 ноября 2013

У меня была такая же проблема с 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>
4 голосов
/ 23 января 2013

Для меня (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: 28,413

DEBUG CrossOriginFilter: 389 - Заголовки [origin,content-type, accept] не входят в число разрешенных заголовков [*]

Затем я проверил результат с помощью $ .ajax ({url: 'anotherHost', тип: 'DELETE', ..})

2 голосов
/ 11 июля 2012

Я только что открыл отчет об ошибке, потратив много времени:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384847

Также следует учитывать тот факт, что подстановочные знаки в значениях параметров в основном не поддерживаются. (т.е. разрешенные заголовки)

...