我们销售在Tomcat中运行的商业Java软件.我们的客户在Mac,Windows和Linux服务器上安装它.然后,公众使用Java Swing客户端界面访问该软件.它使用RMI与服务器软件进行通信.
我们的大多数客户都有防火墙阻止在80/443以外的任何端口上访问服务器.这对于Java 8及更早版本来说不是问题,它可以在动态端口上使用RMI,或在防火墙阻止访问时切换到HTTP.
但是,删除Java 9中的HTTP代理功能意味着我们的大多数客户将无法再使用我们目前构建的软件.对于我们的客户来说,为公共SSH访问配置防火墙和服务器是不切实际和不安全的,特别是对于运行Windows服务器的客户.
这是否意味着我们需要重写我们的应用程序架构以使用除RMI之外的某些网络协议?或者有没有办法将RMI保留在Java 9中?完全抛弃RMI需要完全重写面向用户的应用程序代码,并且不是一种经济高效的选择.
解决方法
正如#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和套接字工厂.