码头和x27的使用示例;s ProxyServlet.Transparent类

码头和x27的使用示例;s ProxyServlet.Transparent类,proxy,jetty,transparent,dynamic-proxy,Proxy,Jetty,Transparent,Dynamic Proxy,我正在尝试使用jetty7构建一个透明的代理设置。想法是将源服务器隐藏在jetty服务器后面,以便传入的请求可以以透明的方式转发到源服务器 我想知道是否可以使用jetty的ProxyServlet.Transparent实现来实现这一点。如果有,谁能给我举几个例子 此示例基于Jetty-9。如果要使用Jetty 8实现此功能,请实现proxyHttpURI方法(请参见Jetty 8)。下面是一些示例代码 import java.io.IOException; 导入java.net.InetAdd

我正在尝试使用jetty7构建一个透明的代理设置。想法是将源服务器隐藏在jetty服务器后面,以便传入的请求可以以透明的方式转发到源服务器


我想知道是否可以使用jetty的ProxyServlet.Transparent实现来实现这一点。如果有,谁能给我举几个例子

此示例基于Jetty-9。如果要使用Jetty 8实现此功能,请实现proxyHttpURI方法(请参见Jetty 8)。下面是一些示例代码

import java.io.IOException;
导入java.net.InetAddress;
导入java.net.URI;
导入java.util.List;
导入java.util.Map;
导入java.util.Random;
导入javax.servlet.ServletConfig;
导入javax.servlet.ServletException;
导入javax.servlet.ServletRequest;
导入javax.servlet.ServletResponse;
导入javax.servlet.http.HttpServletRequest;
导入org.eclipse.jetty.servlets.ProxyServlet;
/**
*当本地计算机上的请求无法满足时,它将异步执行
*代理到目标框。定义规则
*/
公共类ContentBasedProxyServlet扩展了ProxyServlet{
专用int远程端口=8080;
公共无效设置端口(int端口){
this.remotePort=端口;
}
public void init(ServletConfig config)抛出ServletException{
super.init(config);
}
公共void服务(ServletRequest请求、ServletResponse响应)抛出IOException、ServletException{
超级服务(请求、响应);
}
/**
*仅适用于9+码头。
*/
@凌驾
受保护的URI重写URI(HttpServletRequest请求){
字符串proxyTo=getProxyTo(请求);
if(proxyTo==null)
返回null;
字符串路径=request.getRequestURI();
String query=request.getQueryString();
if(查询!=null)
路径+=“?”+查询;
返回URI.create(proxyTo+“/”+path).normalize();
}
私有字符串getProxyTo(HttpServletRequest请求){
/*
*实现这个方法:所有的魔法都发生在这里。使用这个方法来计算你的目标机器地址。你可以
*地址的静态列表,根据URI或请求内容,您可以透明地路由请求。
*/
}
}
此外,您还可以实现一个过滤器,用于确定请求是否需要在本地计算机或目标计算机上终止。如果请求是针对远程机器的,则将请求转发到此servlet

// Declare this method call in the filter.
request.getServletContext()
    .getNamedDispatcher("ContentBasedProxyServlet")
    .forward(request, response);

我在jetty 9上尝试了这个解决方案,但它不起作用。出于某种原因,它在service()方法上给了我一个NullPointerException。我需要更多的信息,如堆栈跟踪或实际代码,以提供任何建议。最像NPE的是从getProxyTo()方法或rewriteURI()方法冒泡出来的。@user766453这个示例太棒了。但是,我面临的是-javax.servlet.ServletException:java.lang.IllegalStateException:No server executor for proxy。你有什么想法吗?我在这里问了我的问题-@user766453您是否可以添加如何将ContentBasedProxyServlet添加到处理程序列表的代码?提前谢谢我尝试了代码,得到了一个超时异常。你知道吗?