2017-09-27 7 views
0

J'ai plusieurs filtres de servlet qui doivent être exécutés dans l'ordre - l'un après l'autre. Je ne veux pas les déclarer dans le fichier web.xml et je ne souhaite pas non plus utiliser l'annotation @WebFilter. Au lieu de cela, j'utilise la méthode ServletContext.addFilter().Ordre de filtre de servlet lorsque les filtres sont enregistrés par programme

La question est la suivante: les filtres sont-ils chaînés dans le même ordre que l'ordre que j'ai appelé la méthode addFilter()? Est-ce documenté quelque part? J'ai vu cette question et la réponse: How to define servlet filter order of execution using annotations in WAR mais elle ne couvre pas le cas programmatique que j'ai.

Répondre

0

Il semble que les filtres soient ajoutés dans l'ordre dans lequel les méthodes du ServletContext sont appelées, au moins dans Tomcat.

Si nous regardons le code source de tomcat 8, il existe une classe ContextFilterMap (à l'intérieur de StandardContext.java) qui préserve un tableau de cartes de filtrage. Et il y a deux méthodes: add et addBefore qui conservent une variable "point d'insertion" qui conserve l'ordre d'insertion.

0

Je ne connais aucune définition de l'ordre des filtres qui sont ajoutés avec ServletContext.addFilter donc je ne m'attendrais pas à une commande spéciale.

Je ne sais pas si vous l'appelez un code odeur mais il est possible d'ajouter un filtre avec addFilter et à partir du filtre appelez l'autre filtre. De cette façon, votre code définit l'ordre de ces deux filtres. Ce n'est pas la meilleure façon, je sais, mais peut-être que ça peut t'aider.