Программно настроить конфигурацию Jetty для увеличения разрешенной длины URL

Мы используем встроенный Jetty 9.3.1.v20150714 и столкнулись с проблемой, из- за которой наш длинный URL-адрес запроса в сочетании с другими заголовками был длиннее, чем разрешено.

Решение кажется простым: увеличить requestHeaderSize в HttpConfiguration, Но как мне это сделать легко? Я в настоящее время создаю Server, ServletContextHandlerи ServletHolder, Но смешать в обычай HttpConfigurationДолжен ли я создать новый ServerConnector а также HttpConnectionFactory? Нужно ли переопределять конфигурации HTTP и HTTPS? Как я могу легко изменить requestHeaderSize без перенастройки всех настроек по умолчанию?

1 ответ

Решение

Если вы просто устанавливаете это одно свойство, вы можете установить его на HttpConfiguration это было создано по умолчанию:

public static void main(String[] args) throws Exception {
    Server server = new Server(8080);
    server.setHandler(new DefaultHandler()); // 404s for everything except favicon.ico

    for (Connector c : server.getConnectors()) {
        c.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setRequestHeaderSize(65535);
    }

    server.start();
    server.join();
}

Вам не нужно отдельно переопределять конфигурацию HTTPS, потому что, основываясь на вашем описании того, что вы в данный момент создаете, у вас нет никаких HTTPS-коннекторов. Даже если у вас был разъем HTTPS, вышеприведенный цикл будет работать, потому что ServerConnector настроенный для HTTPS все равно будет иметь связанный HttpConnectionFactory, Вы можете видеть, как HTTPS-соединитель будет настроен в этом примере.

Однако на самом деле не так уж много кода для самостоятельной настройки необходимых объектов:

public static void main(String[] args) throws Exception {
    Server server = new Server();
    server.setHandler(new DefaultHandler()); // 404s for everything except favicon.ico

    HttpConfiguration config = new HttpConfiguration();
    config.setRequestHeaderSize(65535);
    ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(config));
    http.setPort(8080);
    server.setConnectors(new Connector[] {http});

    server.start();
    server.join();
}

Я бы порекомендовал выполнить настройку самостоятельно, потому что будет проще поддерживать, если в будущем у вас будут другие изменения конфигурации.

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