Spring: Différence de / ** et / * en ce qui concerne les chemins

Quelle est la différence entre deux astérisques au lieu d’un astérisque quand on se réfère à des chemins?

Plus tôt, j’étais en train de déboguer mon projet Spring 3. J’essayais d’append un fichier .swf en utilisant

Avec le ResourceServlet de mon web.xml

 Resource Servlet  /resources/* 

Mais malheureusement, je recevais cette erreur:

WARN org.springframework.js.resources.ResourceServlet - An attempt to access a protected resource at /images/flash.swf was disallowed.

J’ai trouvé ça vraiment étrange puisque toutes mes images dans le dossier images étaient accessibles mais comment se fait-il que mon fichier .swf soit “protégé”?

Par la suite, j’ai décidé de remplacer /resources/* par /resources/** et cela a finalement fonctionné. Ma question est … pourquoi?

  • Un astérisque ('*') correspond à zéro ou plusieurs caractères, jusqu’à l’occurrence d’un caractère '/' (qui sert de séparateur de chemin). Une chaîne telle que "/abcd/docs/index.html" ne correspondrait pas au modèle '/*/*.index.html' . Le premier astérisque correspond uniquement au premier séparateur de chemin, ce qui entraîne la chaîne "abcd" . Un modèle de correspondance réussi serait '/*/*/*.html' .
  • Une chaîne contenant deux astérisques ('**') correspond à zéro ou plusieurs caractères. Cela pourrait inclure le séparateur de chemin '/' . Dans ce cas, "/abcd/docs/index.html" correspondrait correctement au '/**/*.html' . Le double astérisque, y compris le séparateur de chemin, correspondrait à la chaîne “abcd / docs”.

J’espère que cela pourra aider !

Ceci est un modèle de chemin utilisé dans Apache ant , Spring Team l’implémente et l’utilise dans toute la structure.

Pour référence, voir javadoc de AntPathMatcher (le plus récent javadoc semble avoir un problème, donc je lie un ancien).

De retour à votre problème, selon le document, il n’a que 3 règles:

  1. ? correspond à un caractère
  2. * correspond à zéro ou plusieurs caractères
  3. ** correspond à zéro ou plusieurs «répertoires» dans un chemin