J'ai déjà trouvé quelques questions liées à ce sujet, mais je me suis rendu compte qu'aucun d'entre eux ne faisait la lumière sur ce sujet.
Apparemment, le OncePerRequestFilter garantit qu'une demande passe à travers le filtre une seule fois dans la chaîne de filtrage, mais je ne sais pas exactement quand le contraire se produirait.
Ce serait bien de voir quelques scénarios dans lesquels utiliser l'un ou l'autre. Également un exemple sur quand et comment le filtre peut être appliqué plusieurs fois sur la chaîne de filtres.
Par exemple.
Le javadoc pour les états OncePerRequestFilter
À partir de Servlet 3.0, un filtre peut être appelé dans le cadre de distributions
javax.servlet.DispatcherType REQUEST
Oujavax.servlet.DispatcherType ASYNC
Qui se produisent dans des threads séparés. Un filtre peut être configuré dansweb.xml
S'il doit être impliqué dans les envois asynchrones. Cependant, dans certains cas, les conteneurs de servlets supposent une configuration par défaut différente. Par conséquent, les sous-classes peuvent remplacer la méthodeshouldNotFilterAsyncDispatch()
pour déclarer statiquement si elles doivent en effet être invoquées, ne fois, pendant les deux types de répartitions afin de fournir l'initialisation des threads, la journalisation, la sécurité, etc. Ce mécanisme complète et ne remplace pas la nécessité de configurer un filtre dansweb.xml
Avec des types de répartiteur.
Il s'agit donc d'une fonctionnalité de "sécurité" supplémentaire mise en œuvre au printemps pour s'assurer que les choses fonctionnent de la même manière quel que soit l'environnement. Si vous regardez les classes qui l'étendent, vous remarquerez qu'il y en a beaucoup; y compris CorsFilter
. Je ne sais pas s'il existe des filtres Spring qui ne l'étendent pas , probablement pas.