我正在尝试使用嵌入式码头编写代理服务器(9.4.9.v20180320)。理想情况下,我们希望使用AsyncMiddlemanServlet,以便我们可以拦截内容并在返回到客户端之前对其进行扩充/替换。通常情况下,它适用于HTTP,但我似乎无法通过HTTPS取得任何实际进展。
这是一个内部使用的代理服务器,用于向访问内部HTTPS托管内容的旧服务器产品添加一些功能。我需要让对话的服务器端元素执行必要的HTTPS对话以获取内容(我可以使用apache HttpClient在一个简单的普通' servlet中完成)我需要拥有代理side也管理CONNECT请求,因为这是旧服务器产品请求HTTPS内容时收到的。在这种情况下,当然有两种不同的SSL连接 - 旧服务器产品到我们的代理服务器,我们的代理服务器到内容。
从很多阅读中可以看出,问题在于servlet没有实现响应CONNECT请求的能力。我尝试了很多不同的例子,包括覆盖newHttpClient,如下所示:
@Override
protected HttpClient newHttpClient() {
return new HttpClient(new SslContextFactory());
}
并按照" Jetty ProxyServlet with SSL support"实施createHttpClient但无济于事。
我发现最接近的事情就是添加一个这样的connectHandler(使用简单的proxyServlet): public static void main( String[] args )
{
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(10106);
server.addConnector(connector);
// Setup handler to handle CONNECT methods
ConnectHandler proxy = new ConnectHandler();
server.setHandler(proxy);
// Setup proxy servlet
ServletContextHandler context = new ServletContextHandler(proxy,
"/",ServletContextHandler.SESSIONS);
myProxyServlet mps = new myProxyServlet();
context.addServlet(new ServletHolder(mps), "/*");
try{
server.start();
} catch(Exception e){
System.out.println("oh dear ;-) " + e.getMessage());
}
}
这种方法的工作原理是使用curl来调用https内容的代理请求会返回内容,但它不会在我的proxyServlet附近(或者当我使用它时,我的普通普通servlet)。
我们正在测试curl:
curl --insecure -x localhost:10106 https://stackoverflow.com/questions/9852056/jetty-proxyservlet-with-ssl-support?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
有什么方法可以将ConnectHandler与我的servlet一起使用?一个简单的简单servlet,或者最重要的AsyncMiddlemanServlet?或者有更好的方法来实现我想要做的事情吗?