次のサーブレット コードで jetty 9 を使用して透過プロキシを正常に作成しました。
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
も同様に機能します。
ただし、認証のためオーバーアクセスhttp://proxy.from.above/path
はできません。したがって、私は次のように補足rewriteURI()
します。
builder.setUserInfo("admin", "password");
残念ながら、これは効果がなく、サーバーはブラウザーに資格情報の入力を求めます。
プロキシにユーザー情報を挿入する適切な方法はありますか? それとも、必ずクライアントから来る必要がありますか?