Мне нужно добавить защиту в приложение, основанное на Webflux, и у меня есть требования, которые означают, что мне нужно добавить несколько цепочек фильтров. Однако в текущей реализации WebFilterChainProxy
используется Flux.filterWhen(...)
, который, если я правильно читаю документы, будет возвращать только первое совпадение в цепочке.
Учитывая вышеизложенное, у меня есть три вопроса: -
Мои знания о реакции очень ограничены, может ли кто-нибудь подтвердить, правильно ли мое понимание того, что filterWhen
делает?
Если да, может ли кто-нибудь предложить способ заставить несколько цепочек фильтров работать в новой реактивной модели Spring Security 5?
Если я неправильно понял, как работает метод filterWhen, кто-нибудь может предложить какие-либо соображения, почему обрабатывается только одна из моих цепочек фильтров?
Способ добавления фильтров в цепочку заключается в нескольких методах настройки, помеченных @Order
, аналогично блоку кода ниже.
@Configration
@EnableWebFluxSecurity
public class SecurityConfig
...
@Bean
@Order(1)
SecurityWebFilterChain chain1(ServerHttpSecurity http) {
return http.httpBasic().disable()......
}
@Bean
@Order(2)
SecurityWebFilterChain chain2(ServerHttpSecurity http) {
return http.httpBasic().disable()......
}
@Bean
@Order(3)
SecurityWebFilterChain chain3(ServerHttpSecurity http) {
return http.httpBasic().disable()......
}
...
}
Когда я отлаживаю приложение, я вижу, что все три фильтра были добавлены в WebFilterChainProxy
, но я всегда получаю только один соответствующий фильтр. Мне нужно найти способ вернуть все подходящие фильтры.
Может кто-нибудь помочь, пожалуйста?