У меня есть список фильтров для моего приложения Spring Boot, которые проверяют, должен ли мой вошедший в систему пользователь включить или нет, и фильтры возвращают Mono<Boolean>
Теперь я хочу передать свой объектдля всех из них, и цепи фильтры.Но суть в том, что мне нужно прекратить фильтрацию, если какой-либо из фильтров возвращает false
Вот мой Filter
интерфейс
interface Filter {
fun doFilter(obj: UserDetails): Mono<Boolean>
}
А вот мой код для метода входа в систему
private fun login(serverRequest: ServerRequest, securityFilters: List<SecurityFilter>): Mono<ServerResponse> {
return serverRequest
.bodyToMono(LoginPayload::class.java)
.flatMap {
userDetailsService.findByUsername(it.username)
.filter { userDetails -> passwordEncoder.matches(it.password, userDetails.password) }
}
./////////////////////////TODO///////////////////////
.flatMap {
val jwt = jwtService.generateJwtToken(it)
ServerResponse
.ok()
.cookie(ResponseCookie.from("jwt-access-token", jwt).build())
.build()
}
.switchIfEmpty(ServerResponse.status(HttpStatus.UNAUTHORIZED).build())
}
Я хочу отфильтровать мой объект по всем фильтрам на TODO
части и сделать окончательный flatMap
, только если все фильтры возвращают значение true, и прекратить фильтрацию и выдать empty
, если один изфильтры не работают