Я новичок в Spring Webflux.Я хочу использовать WebFilter для проверки подлинности.Итак, идея состоит в том, чтобы перехватить запрос, проверить заголовок авторизации и распространить запрос
Вот что я пытался сделать.Я успешно перехватил запрос и проверил, правильный ли заголовок.
public class AuthWebFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
log.info("Request {} called", exchange.getRequest().getPath().value());
System.out.println("Tokent authenitcation..");
ServerHttpResponse response = exchange.getResponse();
getAuthorization(exchange.getRequest())
.doOnError(error -> exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED)))
.subscribe(authorization -> System.out.println(authorization));
return chain.filter(exchange);
}
private Mono<String> getAuthorization(ServerHttpRequest request) {
String authorization = request.getHeaders().getFirst(Authorization);
if (StringUtils.isBlank(authorization)) {
return Mono.error(
new UnauthorizedException(
Status.Unauthorized, "The request must provide authorization.", null));
}
return Mono.just(authorization);
}
}
Проблема в том, что я не знаю, как прервать поток, если произойдет ошибка.Хотя код состояния изменен на 401, тело ответа все еще содержит запрошенные данные.Другими словами, он считается успешным запросом, но изменяется только код состояния
Кто-нибудь знает, какой шаг я здесь пропускаю?