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



我们使用的是嵌入式Jetty 9.3.1。v20150714和遇到的问题,我们的长查询URL,结合其他头,比允许的更长。

解决方案似乎很简单:增加HttpConfiguration中的requestHeaderSize。但我怎么才能轻松做到呢?我目前正在创建Server, ServletContextHandlerServletHolder。但是要混合自定义HttpConfiguration,我必须创建一个新的ServerConnectorHttpConnectionFactory吗?我必须重写HTTP和HTTPS配置吗?如何在不重新配置所有默认值的情况下轻松更改requestHeaderSize ?

如果你只是设置一个属性,你可以在默认情况下实例化的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。您可以在这个示例中看到如何配置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();
}

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

相关内容

  • 没有找到相关文章

最新更新