是否可以在 ConnectHandler 上安装过滤器?

Is it possible to have Filters on a ConnectHandler?

我在Jetty 9中使用了原来的jetty-proxy,嵌入式启动代理服务器时,修改浏览器的代理端口后,所有访问都可以通过代理服务器,我在代理服务器中添加了自己的过滤器,添加方式是:

ServletHandler handler = new ServletHandler();
FilterHolder fh = handler.addFilterWithMapping((Class<? extends Filter>) TLFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
context.addFilter(fh, "/*", EnumSet.of(DispatcherType.REQUEST));

但是我的过滤器只能过滤HTTP请求,不能过滤HTTPS。

jetty 的开发维护者给出了结果: 可以将 CONNECT 请求传递给 Servlet 服务方法,但这样做最终是徒劳的,因为不可能在 servlet 内部处理 CONNECT。您实际上无法访问原始 IO 流,只能访问 request/response 的 HTTP 内容。你几乎可以完成他的工作,但永远不会高效(没有异步 IO 等)所以最终你最终还是会退回到 Jetty APIs。

此外,为什么不直接建立在 Jetty 已经提供的支持之上:

http://download.eclipse.org/jetty/stable-9/xref/org/eclipse/jetty/proxy/ConnectHandler.html http://download.eclipse.org/jetty/stable-9/xref/org/eclipse/jetty/proxy/ProxyServlet.html