我已经使用 jetty 9 和以下 servlet 代码成功创建了一个透明代理:
public class ProxyRewriteServlet extends ProxyServlet.Transparent {
private static final String HOST = "192.168.1.20" // 'hidden' server
private static final int PORT = 28000 // the port the server is listening to
@Override
protected URI rewriteURI(HttpServletRequest request) {
URIBuilder builder = new URIBuilder()
.setScheme("http").setHost(HOST).setPort(PORT)
.setPath(request.getRequestURI());
return builder.build();
}
代理转发到需要基本身份验证的知名服务器 (192.168.1.20)。使用该地址直接访问服务器是http://admin:password@192.168.1.20/path
可行的。通过代理访问http://admin:password@proxy.from.above/path
也可以。
但是,由于身份验证,访问 overhttp://proxy.from.above/path
不起作用。因此,我补充rewriteURI()
以下内容:
builder.setUserInfo("admin", "password");
不幸的是,这没有任何效果,服务器会要求浏览器输入凭据。
是否有适当的方法在代理处注入用户信息?还是他们必须来自客户?