以编程方式设置Jetty配置以增加允许的URL长度

时间:2015-08-03 16:30:17

标签: java url http-headers embedded-jetty httpconfiguration

我们正在使用嵌入式Jetty 9.3.1.v20150714并遇到了problem,其中我们的长查询网址与其他标头相比,长度超过允许的数量。

solution似乎很简单:增加requestHeaderSize中的HttpConfiguration。但是我该如何轻松地做到这一点?我目前正在制作ServerServletContextHandlerServletHolder。但要混合使用自定义HttpConfiguration,我是否必须创建新的ServerConnectorHttpConnectionFactory?我是否必须覆盖HTTP和HTTPS配置?如何在不重新配置所有默认值的情况下轻松更改requestHeaderSize

1 个答案:

答案 0 :(得分:7)

如果您只是设置了一个属性,则可以在默认情况下实例化的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连接器,上面的循环也会起作用,因为为HTTPS配置的ServerConnector仍然会有一个关联的HttpConnectionFactory。您可以在this example中查看如何配置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();
}

我建议您自己进行设置,因为如果将来有其他配置更改,它会更容易维护。