java - 在 Java 9 中,是否可以使用 RMI 替代 HTTP 隧道?

标签 java rmi java-9 http-tunneling

所以我看到 Java 9 中删除了基于 RMI 的 HTTP 隧道。

我们销售在 Tomcat 中运行的商业 Java 软件。我们的客户将其安装在他们的 Mac、Windows 和 Linux 服务器上。然后,公众可以通过 Java Swing 客户端界面访问该软件。它使用 RMI 与服务器软件进行通信。

我们的大多数客户都有防火墙,阻止通过 80/443 以外的任何端口访问服务器。这对于 Java 8 及更早版本不是问题,它们可以在动态端口上使用 RMI 或在防火墙阻止访问时切换到 HTTP。

但是,在 Java 9 中删除 HTTP 代理功能意味着我们的大多数客户将无法再使用我们当前架构的软件。对于我们的客户来说,为来自公众的 SSH 访问配置他们的防火墙和服务器是不切实际和不安全的,尤其是对于运行 Windows 服务器的客户。

这是否意味着我们需要重写我们的应用程序架构以使用 RMI 以外的某些网络协议(protocol)?或者有没有办法在 Java 9 中保留 RMI?完全放弃 RMI 将需要完全重写我们面向用户的应用程序代码,这不是一个具有成本效益的选择。

最佳答案

好像JDK-8023862正如 release notes 中也提到的,已经弃用了来自 RMI 的 HTTP 代理Java8.

#JDK8180642 中的建议它还询问从 RMI 中删除 HTTP 代理实现的替代方法。备选方案之一可能是 use ssh to tunnel through the proxy

Use ssh to establish a local port that is tunneled through the proxy to the remote machine. The connection will be more functional than the HTTP proxy implementation.

在链式链接中,您可以找到关于 how can one make outgoing Java RMI calls through a local firewall? 的文章 这也建议其他实现,例如 SOCKS 和套接字工厂。

关于java - 在 Java 9 中,是否可以使用 RMI 替代 HTTP 隧道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47362298/

相关文章:

java - 公开为 RmiServiceExporter 代理的服务的引用返回值(或 RMI 的替代方案)

java - Java 9 模块系统是否支持可选依赖项?

Java 9 ifPresentOrElse 返回值

java - WSDL 到 java 转换失败

java - RMI多线程骨架

java - 在Java中向同一进程输入不同的字符串

java - Rmi 客户端不使用代码库

java - 为什么 --limit-modules 对我不起作用?

java - 使用 ImageIcons 在 Java 中编程 Tic Tac Toe - WinningCondition

Java EE CDI - 每次调用方法时获取类的新实例