Java 通过littleproxy创建反向代理

Java 通过littleproxy创建反向代理,java,filter,proxy,little-proxy,Java,Filter,Proxy,Little Proxy,我是littleproxy的初学者,如何创建反向代理服务器 我的代理从客户端获取请求并将其发送到服务器(服务器仅限于与www.xxx.com相同的常规站点,仅包含网页(在非rest中),代理从服务器获取响应(网页)并返回到客户端 例如,客户端url是localhost:8080/x,代理将其映射到www.myserver.com/xy,并为客户端显示xy页面。如何使用筛选器或httpservlet来实现这一点 我的http servlet如下所示: public class ProxyFilt

我是littleproxy的初学者,如何创建反向代理服务器

我的代理从客户端获取请求并将其发送到服务器(服务器仅限于与www.xxx.com相同的常规站点,仅包含网页(在非rest中),代理从服务器获取响应(网页)并返回到客户端

例如,客户端url是
localhost:8080/x
,代理将其映射到
www.myserver.com/xy
,并为客户端显示
xy
页面。如何使用筛选器或httpservlet来实现这一点

我的http servlet如下所示:

 public class ProxyFilter implements Filter {
      public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        HttpProxyServer server =
        DefaultHttpProxyServer.bootstrap()
        .withPort(8080)
        .withFiltersSource(new HttpFiltersSourceAdapter() {
            public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx) {
               return new HttpFiltersAdapter(originalRequest) {
                  @Override
                  public HttpResponse clientToProxyRequest(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return null;
                  }

                  @Override
                  public HttpResponse proxyToServerRequest(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return null;
                  }

                  @Override
                  public HttpObject serverToProxyResponse(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return httpObject;
                  }

                  @Override
                  public HttpObject proxyToClientResponse(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return httpObject;
                  }   
               };
            }
        })
        .start();
    }
    public void init(FilterConfig config) throws ServletException {

    }
    public void destroy() {

    }
}

LittleProxy使用
Host
头进行路由。因此,最简单的方法是在
clientToProxyRequest
方法中将
Host
设置为真正的服务器

public HttpResponse clientToProxyRequest(HttpObject httpObject) { if(httpObject instanceof FullHttpRequest) { FullHttpRequest httpRequest = (FullHttpRequest)httpObject; httpRequest.headers().remove("Host"); httpRequest.headers().add("Host", "myserver.com:8080"); } return null; } 公共HttpResponse客户端toProxyRequest(HttpObject HttpObject){ if(完整HttpRequest的httpObject实例){ FullHttpRequest httpRequest=(FullHttpRequest)httpObject; httpRequest.headers().remove(“主机”); 添加(“主机”,“myserver.com:8080”); } 返回null; }