Есть ли способ заставить загрузочные фильтры Spring работать асинхронно? - PullRequest
1 голос
/ 24 февраля 2020

Я знаю, что методы в контроллере в Springboot могут быть сделаны асинхронными с помощью @Async аннотации над ними и CompletableFuture<T> в качестве типа их возврата, но может ли нечто подобное быть достигнуто в Spring filter ?

В фильтрах нам нужно реализовать метод doFilter, который возвращает void. Есть ли способ сделать его асинхронным?

Ссылка на любой ресурс очень ценится.

1 Ответ

0 голосов
/ 24 февраля 2020

Это невозможно. Фильтры Spring Security являются реализацией схемы цепочки ответственности .

https://spring.io/guides/topicals/spring-security-architecture / Web Security

Не более одного сервлета может обрабатывать один запрос, но фильтры образуют цепочку, поэтому они упорядочены, и фактически фильтр может наложить вето на остальную часть цепочки, если он хочет обработать сам запрос. Фильтр также может изменять запрос и / или ответ, используемые в нижестоящих фильтрах и сервлетах.

Поскольку каждый из фильтров может изменять / отклонять запрос и, кроме того, он упорядочен, обработка фильтра Цепочка должна быть выполнена последовательно .

С другой стороны, если вы действительно хотите выполнить некоторую асинхронную c обработку, это можно сделать, разветвив / объединив потоки внутри фильтра.

...