Pages

mercredi 12 juin 2013

Tomcat 7.0.41 servlet filter implémentant CORS

Depuis début juin la nouvelle version de Tomcat (version 7.0.41) est disponible. La liste des changements est disponible à l'URL suivante http://tomcat.apache.org/tomcat-7.0-doc/changelog.html.


Je vais revenir sur une évolution en particulier, le filtre de Servlet CORS qui vient compléter un article que j'ai écrit il y a quelques temps sur cette norme du W3C. Pour rappel CORS Cross-origin resource sharing est une norme permettant de résoudre les problèmes des requêtes cross domain.

Les navigateurs implémentent cette norme en ajoutant des données dans les entêtes HTTP. En retour elles attendent que le serveur complète ces informations. Je vous avais proposer une implémentation simple d'un Filter pour pouvoir exposer vos services REST Jersey. Ce code n'est plus nécessaire si vous migrez aujourd'hui vers la dernière version de Tomcat.

Vous pouvez utiliser un filter qui interprétera les requêtes entrantes et sortantes.

<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.methods</param-name>
 <param-value>GET,POST,PUT</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,Access-Control-Allow-Credentials</param-value>
 </init-param>
 <init-param>
 <param-name>cors.support.credentials</param-name>
 <param-value>false</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>CorsFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

Vous trouverez plus d'explications sur les différents paramètres sur http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter


5 commentaires:

  1. Salut,

    Merci pour ton code mais quelles sont les dépendances Maven à ajouter au pom.xml poru que récupérer la classe en question?.
    J'ai essayé çela mais ca ne marche pas :

    org.apache.tomcat
    tomcat-catalina
    7.0.0

    RépondreSupprimer
  2. Je ne vois pas l'intérêt de charger la lib catalina par Maven car elle est intégrée à Tomcat dans le répertoire lib et la lib est nécessaire au chargement de la webapp dans Tomcat. Si jamais c'est important tu peux trouver sur le repo mavencentral des versions de la librairie catalina.jar http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.geronimo.ext.tomcat%22%20AND%20a%3A%22catalina%22

    RépondreSupprimer
  3. Si ton code est fait pour les versions de Tomcat antérieure à la version 7.0 (en l'occurence un Tomcat 6.0.37 pour moi), la librairie n'existe pas dans le répertoire lib. Je vais regarder avec ce que tu m'as donné.

    RépondreSupprimer
  4. Tu ne peux pas t'en sortir. Il faut avoir une version de Tomcat >= 7.0.41. Si ce n'est pas possible dans ton contexte il faut faire autrement et c'est à ton application de le gérer (voir http://javamind-fr.blogspot.fr/2013/05/cors-norme-w3c-alternative-jsonp.html). Il existe d'autres articles sur le sujet

    RépondreSupprimer
  5. Salut Guillaume,

    Ton lien vers ton ancien article est ce qu'il me fallait.
    Merci

    RépondreSupprimer

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.