Undertow-如何设置反向代理以监视我的REST API的HTTP/HTTPS流量



我想从我的计算机基本上嗅探http/https请求和响应到远程URL(基本上是REST API)。我了解有很多工具可以帮助我获得想要的东西,但是我必须写一个实用程序才能在Java中执行此操作(因为我们正在开发的某些应用程序将使用它)。

我想做的是设置代理(或反向代理 - 我对术语的理解受到限制),我将所有请求都路由到真实的API。该代理必须捕获请求正文(如果在帖子或提取的情况下)并将请求转发给真实API,捕获其响应并将其发送回客户。

我遇到了 utchate ,使用我能够使用其LoadBalancingProxyClient代理客户端创建并运行反向代理。但是我在这里有几个问题。

假设我的API是http://myrealapplication.com/rest/operation1,我想向此API发布一个JSON。

我创建了一个代理服务器,如下所示:

        LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient();
        loadBalancer.addHost(new URI("http://myrealapplication.com"));
        loadBalancer.setConnectionsPerThread(20);
        Undertow reverseProxy = Undertow.builder()
                .addHttpListener(8990, "localhost")
                .setIoThreads(4)
                .setHandler(Handlers.requestDump(new ProxyHandler(loadBalancer, 3000, null)))
                .build();
        reverseProxy.start();

所以一旦我启动了反向代理服务器,就有两件事:

  1. 我的反向代理实际上已经成为我的真实API的别名,但是我如何捕获此层的请求和响应?
  2. 使用上述设置,为了让我的请求通过此代理,我必须将我的URL更改为http://localhost:8990/rest/operation1,这可能是不可接受的,因为我们期望要做的就是将localhost:8990设置为a 代理,并将我的URL保留为http://myrealapplication.com/rest/operation1,因此当响应来自实际API时,它可以向最终客户端。

我可以使用Undertow实现这一目标吗?还是还有其他可以在程序中使用的Java API的工具?

请帮助!

谢谢Sriram

我认为您实际寻找的是前向代理。这是示例代码,可以帮助您创建一个。

public class ForwardProxyWithUndertow {
  public static void main( String[] args ) {
    final HttpHandler forwardProxyHandler = new ConnectHandler(ForwardProxyWithUndertow::handleNotFound );
    Undertow.builder()
      .addHttpListener(8080, "localhost")
      .setHandler( forwardProxyHandler )
      .build()
      .start();
  }
  static void handleNotFound( HttpServerExchange e ){
    e.setStatusCode(404);
    e.endExchange();
  }
}

希望它有帮助!;)

相关内容

  • 没有找到相关文章

最新更新