【问题标题】:Apache wave behind company proxy; or jetty doesn't respect proxy properties公司代理背后的 Apache 浪潮;或码头不尊重代理属性
【发布时间】:2012-04-20 07:04:55
【问题描述】:

我们遇到的高级问题是这样的。我们已经在公司网络上安装并运行了 Apache Wave。只要我们加载网站、注册、登录、创建和参与 wave,它就可以工作。但我似乎无法加载外部小工具,例如 http://everybodywave.appspot.com/gadget/image/gadget.xml。我确定这是代理问题,因为我在公司网络之外安装了 wave,并且能够正常加载小工具。

我感到困惑的是;我在几个地方设置了 Apache Wave 的 JVM 代理设置,但是它们加载小工具不起作用。我已经在 jvm 命令行、环境变量 JAVA_OPTIONS、JAVA_OPTS、JETTY_OPTIONS 和 JETTY_OPTS 中以及在调用加载小工具之前通过 System.setProperty 设置了 http.proxyHost 和 http.proxyPort。我添加了一些代码来在 Apache Wave 的 jvm 中吐出一个外部站点,并且可以正常工作,因此代理设置可以正常工作。但小工具仍然没有。

这是我能说出的最接近问题的一点: https://svn.apache.org/repos/asf/incubator/wave/trunk/src/org/waveprotocol/box/server/ServerMain.java 我在调用下方的某处收到一条调试消息:(第 121 行;在 GadgetProxyServlet 中)

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    proxyServlet.service(req, res);

调试是:

[java] 2012-04-06 10:47:25.197:WARN:oejsKwbs.ServerMain$GadgetProxyServlet, annotation=[none]]:java.net.ConnectException: Connection timed out

所以也许我的问题是.. 为什么 Jetty ProxyServlet.Transparent 不尊重 jvm 的 http 代理设置?我还需要设置一些 Jetty 属性吗?

【问题讨论】:

    标签: java jetty google-wave


    【解决方案1】:

    看起来码头 ProxyServlet 在幕后使用了码头异步 http 客户端,其中有一个 setProxy(Address) 用于设置代理。 ProxyServlet 还包含一个扩展点,用于执行封闭的HttpClient 的自定义配置,但这并没有被 Wave 平台公开。我会说你有两个选择:

    • 提供自定义版本的码头ProxyServlet,它从系统属性或其他东西中获取代理地址,并将其设置在包装的HttpClient 上。这很简单,是我的选择。
    • 同时,您可以向 Wave 团队提交增强请求以公开此设置。

    【讨论】:

    • 谢谢!这行得通。我有点困惑它是如何工作的,因为查看 Jetty 的 ProxyServlet 看起来它正在创建一个新的原始套接字来获取小工具 URL (git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/…)。这让我相信我需要一个我没有的 SOCKS 代理。但无论如何你的建议奏效了。
    • 很高兴它起作用了,看看你在说什么。它将这个连接引入代理并复制请求并将响应输出放在带有套接字输入的线程上。几乎就像在这种情况下,它本身没有做任何代理。
    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 2019-08-29
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多