Можно ли условно пропустить другие фильтры в Spring Cloud Gateway? - PullRequest
1 голос
/ 28 января 2020

Я установил GlobalFilter, чей порядок равен -1, чтобы проверить, является ли jwt в заголовке запроса действительным. Если не верно, я отвечаю с заголовком, в котором говорится, что клиент перенаправить на страницу входа. Если он оказывается недействительным, нет необходимости использовать другие фильтры. Можно ли временно отключить другие фильтры в цепочке и напрямую отправить ответ?

@Order(-1)
@Component
public class JwtRequestFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        try {
            String token = exchange.getRequest().getHeaders().get("Authorization").get(0).substring(7);
        } catch (NullPointerException e) {
            logger.warn("no token.");
            //exchange.getResponse().setStatusCode(HttpStatus.valueOf(401));
            exchange.getResponse().getHeaders().set("status", "401");
            logger.info("status code :" + exchange.getResponse().getStatusCode());
        }
        return chain.filter(exchange);
    }

}

Кроме того, я обнаружил, что exchange.getResponse().setStatusCode(HttpStatus.valueOf(401)); не работает, но exchange.getResponse().getHeaders().set("status", "401"); работает. Почему это не изменено с setStatusCode? Я получил 401 из обоих кодов при входе в систему сразу после того, как установил код состояния, но, используя curl, я всегда получал 200. `

...