WebFlux: как прервать обработку запроса в WebFilter с предоставленным ответом - PullRequest
0 голосов
/ 17 сентября 2018

Я хотел бы сделать что-то вроде ниже в моем WebFilter, чтобы по желанию обойти последующие фильтры и RestControllers:

if(shouldRedirect(exchange)){
  //do redirect
}else if(!canAccess(exchange)){
  //return a 403 response
}else{
  chain.filter(exchange);
}

Как я должен это сделать?

Спасибо

Leon

1 Ответ

0 голосов
/ 17 сентября 2018

Технически, в контракте говорится, что фильтр должен возвращать Mono<Void>, что завершается после обработки обмена (запрос + ответ).

Обычный WebFilter что-то делает с запросом / ответоми затем пересылает обмен на следующий фильтр в цепочке.Но вы также можете в одностороннем порядке обработать обмен и назвать его выполненным.

В этом примере мы устанавливаем код состояния и вызываем ответ.

class MyFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpResponse response = exchange.getResponse();
        response.setStatusCode(HttpStatus.NOT_FOUND);
        return response.setComplete();
    }

}
...