首页 > 解决方案 > 是否可以在 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 。

标签: jettyembedded-jetty

解决方案


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

此外,为什么不建立在 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


推荐阅读