GenericFilterBean vs OncePerRequestFilter, когда использовать каждый? - PullRequest
0 голосов
/ 18 мая 2018

Я уже нашел несколько вопросов, связанных с этой темой, но понял, что ни один из них не пролил свет на эту тему.

Очевидно, OncePerRequestFilter гарантирует, что запрос проходит через фильтр только один раз в цепочке фильтров, но мне не совсем ясно, когда произойдет обратное.

Этобыло бы неплохо увидеть некоторые сценарии, в которых можно использовать один или другой.Также пример того, когда и как фильтр может применяться несколько раз в цепочке фильтров.

Например,

  1. Для фильтра JWT, какую реализацию следует использовать и почему?
  2. Для фильтра CORS, какую реализацию следует использовать и почему?и т. д.

1 Ответ

0 голосов
/ 18 мая 2018

Javadoc для OncePerRequestFilter состояний

Начиная с Servlet 3.0, фильтр может вызываться как часть отправлений javax.servlet.DispatcherType REQUEST или javax.servlet.DispatcherType ASYNC, которые происходят в отдельных потоках.Фильтр может быть настроен в web.xml, должен ли он участвовать в асинхронных отправках.Однако в некоторых случаях контейнеры сервлетов принимают другую конфигурацию по умолчанию.Поэтому подклассы могут переопределять метод shouldNotFilterAsyncDispatch() для статического объявления, если они действительно должны быть вызваны, один раз , во время обоих типов диспетчеризации, чтобы обеспечить инициализацию потока, ведение журнала, безопасность и так далее.Этот механизм дополняет и не заменяет необходимость конфигурировать фильтр в web.xml типами диспетчера.

Так что это дополнительная функция безопасности, реализованная в Spring, чтобы убедиться, что все работает одинаково, независимо отокружающая среда.Если вы посмотрите на классы, которые его расширяют, вы заметите, что их много;в том числе CorsFilter.Не уверен, что существуют Spring-фильтры, которые не расширяют его, вероятно, нет.

...