Я установил 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. `