web-dev-qa-db-fra.com

GenericFilterBean vs OncePerRequestFilter quand les utiliser?

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.

  1. Pour un filtre JWT, quelle implémentation doit être utilisée et pourquoi?
  2. Pour un filtre CORS, quelle implémentation doit être utilisée et pourquoi? etc.
9

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 Ou javax.servlet.DispatcherType ASYNC Qui se produisent dans des threads séparés. Un filtre peut être configuré dans web.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éthode shouldNotFilterAsyncDispatch() 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 dans web.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.

2
Kayaman