запрещение определенного метода http

Что касается https://github.com/openzipkin/zipkin/pull/3239, мы столкнулись с некоторым (возможно) странным поведением, и я хотел знать, работает ли ниже тест, как ожидалось, или нет:

import com.linecorp.armeria.client.WebClient;
import com.linecorp.armeria.common.HttpMethod;
import com.linecorp.armeria.common.HttpRequest;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.common.HttpStatus;
import com.linecorp.armeria.server.Server;
import com.linecorp.armeria.server.ServerBuilder;
import java.util.concurrent.CompletableFuture;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class ArmeriaTraceBug {

  @Test
  public void test_trace_bug() throws Exception {
    ServerBuilder sb = Server.builder();
    sb.http(7003);
    sb.service("/", (ctx, req) -> HttpResponse.of("Hello, world!"));
    sb.routeDecorator()
      .methods(HttpMethod.TRACE)
      .pathPrefix("/")
      .build((delegate, ctx, req) -> HttpResponse.of(HttpStatus.METHOD_NOT_ALLOWED));
    Server server = sb.build();
    CompletableFuture<Void> future = server.start();
    future.join();
    WebClient webClient = WebClient.of("http://localhost:7003/");
    final HttpResponse response = webClient.execute(HttpRequest.of(HttpMethod.OPTIONS, "/something"));
    assertThat(response.aggregate().get().status()).isEqualTo(HttpStatus.NOT_FOUND);
  }
}

В основном мы хотели отключить все TRACE запросы и установить pathPrefix("/")для достижения этой цели. Но почему-то OPTIONS позвонить /somethingпопадает в ловушку на том же пути. Если я удалю декоратор маршрута, все заработает, как ожидалось.

1 ответ

Решение

Спасибо, Йорг Хейманс за вопрос. Да, это ошибка, и ее нужно исправить https://github.com/line/armeria/pull/3120 Спасибо!

Другие вопросы по тегам