web-dev-qa-db-fra.com

Filtre d'origine Jetty Cross

J'ai configuré le filtre Cross Origin de Jetty, mais je continue à obtenir l'erreur suivante. Quelqu'un sait-il ce qui ne va pas et comment y remédier? Sous le message d'erreur se trouve mon descripteur de remplacement (c'est-à-dire web.xml supplémentaire)

Erreur:

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

Remplacer le descripteur:

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

En-tête de demande

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

En-tête de réponse

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

Aloha,

J'ai combattu cela pendant un certain temps également, et j'ai constaté que le nœud final devait être:

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

NE PAS

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

Voici le lien que j'ai trouvé pour m'aider: wiki.Eclipse.org/Jetty/Feature/Cross_Origin_Filter

Après avoir mis à jour mon fichier web.xml et redémarré le serveur de la jetée, j'ai pu effectuer une demande interdomaine à l'aide d'appels jQuery ajax.

Rob

25
Robert Whitton

Je suis tombé sur cela lors des appels interdomaines aux applications Web déployées sur GAE. Vous pouvez ajouter un en-tête explicite à vos réponses de servlet (s), comme:

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

et assurez-vous également que vous disposez d'un fichier de stratégie crossdomain.xml à la racine de votre fichier WAR, comme:

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

12
user981

J'ai eu le même problème avec ActiveMQ Ajax dans Jetty Web Server. Mon problème était que les en-têtes autorisés le champ n'accepte pas un caractère générique sous la forme de "*".

Pour que ActiveMQ Ajax fonctionne, je dois également ajouter la méthode "Options" aux allowedMethods.

Filtre d'origine croisée de 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>
6
killer7

Pour moi (jetty-version 8.1.5.v20120716) seules ces lignes dans 'web.xml' aident:

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

J'ai changé le niveau de journal en DEBUG et j'obtiens des informations (comme 'GET, POST, DELETE, PUT, HEAD' et 'Origin, content-type, accept') à partir du journal de la console de la jetée. Par exemple.:

DEBUG CrossOriginFilter: 359 - La méthode DELETE fait partie des méthodes autorisées [GET, POST, DELETE, PUT, HEAD] 19: 14: 28,413

DEBUG CrossOriginFilter: 389 - Les en-têtes [origine, type de contenu, accepter] ne figurent pas parmi les en-têtes autorisés [*]

Ensuite, j'ai vérifié le résultat avec $ .ajax ({url: 'anotherHost', tapez: 'DELETE', ..})

4
Alexander Lyamin

Je viens d'ouvrir un rapport de bug après avoir perdu beaucoup de temps:

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

Sachez également que les caractères génériques dans les valeurs des paramètres ne sont généralement pas pris en charge. (c.-à-d. en-têtes autorisés)

2
user1050755