【问题标题】:How should my proxy intercept packets我的代理应该如何拦截数据包
【发布时间】:2016-12-20 14:52:51
【问题描述】:

我有两个 Web 服务器 AC。由于规则、政策等原因A 不能直接与C' (Crequires requests to have special security headers andA` 通信不支持这个)

我想在 Java 中创建一个名为 B 的“代理”,以促进 AB 之间的通信,但我在概念上遇到了麻烦。

当您创建代理时,您是否不必更改所有服务上的硬编码 URL 以现在通过代理进行传输?然后我想你必须以某种方式将你的目的地作为查询参数传递,例如

http://proxy.com/?destination=mydestination.com

这是代理的工作方式吗?

(我发现了一些类似的问题,但它们并没有解决我遇到的基本问题,即How packets reaches Destination throgh proxy servers?

【问题讨论】:

标签: java networking proxy jetty conceptual


【解决方案1】:

不要从头开始编写自己的代理,这将是一个重做,那里有很多代理实现

Spring 框架

标准小服务程序

如果您对如何构建自己的代理感兴趣,这里有一个使用 spring 框架的简单示例(Servlet 实现与 spring 实现相差不远)

@RestController
public class ProxyController {

/**
 * request handler for all the requests on the registered context intended to be proxied
 *
 * @param request
 * @return
 */
@RequestMapping("/**")
public String defaultGateway(HttpServletRequest request) {
    // edit the original request headers,body etc
    String originalPath =  request.getRequestURI();
    // then fire another HTTP request using the same URI
    return "ProxiedResult"; // return back the result you get from
 }
}

上面的例子是关于如何实现 HTTP 代理或者它是如何工作的一个起点,有很多东西需要覆盖,比如安全性等

【讨论】:

  • 我的问题更具概念性。代理如何开始拦截从 A 发送到 C 的数据包?我需要用代理的地址而不是 C 的地址重新编码 A 吗?
  • 数据包是一个低级概念,当我们创建 HTTP 代理时,我们不需要谈论数据包的协议会处理它,是的,你需要用 B 重新编码 A(B 是代理)地址而不是 C 地址,因为 B 充当 A 和 C 之间的中间接口,您可以将微服务中的 API 网关模式视为代理 microservices.io/patterns/apigateway.html 的示例
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 2020-04-28
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多