Программно настроить конфигурацию 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();
}
Я бы порекомендовал выполнить настройку самостоятельно, потому что будет проще поддерживать, если в будущем у вас будут другие изменения конфигурации.