Frage

Ich habe den Cross -Origin -Filter von Jetty konfiguriert, aber ich erhalte weiterhin den folgenden Fehler. Weiß jemand, was los ist und wie ich es beheben kann? Unterhalb der Fehlermeldung befindet sich mein Override -Deskriptor (dh Supplemental Web.xml)

Fehler:

Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.

Override -Deskriptor:

<!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>

Header anfordern

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

Antwortheader

Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
War es hilfreich?

Lösung

Aloha,

Ich habe auch für eine Weile damit gekämpft und festgestellt, dass der letzte Knoten sein muss:

<filter-mapping>
    <filter-name>cross-origin</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

NICHT

<filter-mapping>
     <filter-name>cross-origin</filter-name>
     <filter-pattern>/*</filter-pattern>
</filter-mapping>

Hier ist der Link, den ich gefunden habe, um mir zu helfen: wiki.eclipse.org/jetty/feature/cross_origin_filter

Nachdem ich meine Web.xml -Datei aktualisiert und den Jetty -Server neu gestartet habe, konnte ich mit JQuery Ajax -Aufrufen eine Cross -Domänenanforderung erstellen.

rauben

Andere Tipps

Ich bin darauf getroffen, als ich Crossdomain -Anrufe an Web -Apps tätig habe, die für GAE bereitgestellt wurden. Sie können Ihren Servlet -Antworten einen expliziten Kopfball hinzufügen, wie:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException 
{
    res.addHeader("Access-Control-Allow-Origin", "*");
    ...
}

Stellen Sie außerdem sicher, dass Sie eine Richtliniendatei crossdomain.xml im Root Ihres Krieges haben, wie:

<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.

Ich hatte das gleiche Problem mit Activemq Ajax auf dem Jetty -Webserver. Mein Problem war, dass die erlaubten Header Feld akzeptiert keine Wildcard in Form von "*".

Um Activemq Ajax zum Laufen zu bringen, muss ich auch die "Options" -Methode zu den erlaubten Methoden hinzufügen.

Cross-Origin-Filter von 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>

Für mich (Jetty-Version 8.1.5.V20120716) hilft nur diese Zeilen in '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>

Ich ändere die Protokollebene, um Informationen (wie "Get, Post, Löschen, Put, Kopf" und "Herkunft, Inhaltstyp, Akzeptieren") aus Jetty Console Log zu erhalten. Z.B:

DEBUG CROSSORIGINFILTER: 359 - Methode Delete gehört zu den zulässigen Methoden [Get, Post, Löschen, Put, Kopf] 19: 14: 28.413

DEBUG CROSSORIGINFILTER: 389 - Header [Ursprung, Inhaltstyp, Akzeptieren] gehören nicht zu den erlaubten Headern [*

Dann habe ich das Ergebnis mit $ .ajax ({url: 'Anotherhost', Typ: 'Delete', ..}) überprüft.

Ich habe gerade einen Fehlerbericht eröffnet, nachdem ich viel Zeit verschwendet hatte:

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

Beachten Sie auch, dass Wildcards in den Parameterwerten meist nicht unterstützt werden. (dh erlaubt Header)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top