1

我正在寻找一种安全的方式来隧道 RMI 流量。在我的应用程序(java Webstart)中,我必须假设唯一打开的端口是端口 80。

我已经查看了 rmi 的 att socketfactories,但我真的需要代理吗?

我需要在客户端完成所有隧道传输。我试图通过的唯一防火墙是在客户端。我无法使用上述端口范围打开 1099。很高兴看到一些实现。谢谢!

4

2 回答 2

4

端口 1099 大约在 1995 年在 IANA 为 RMI 保留。没有理由不对客户端防火墙中的出站访问开放它。

super(port)通过在构造 ( ) 或导出 ( )时提供端口号,可以使 RMI 使用固定端口号exportObject(object, port)。更好的是,如果您通过 JVM 在服务器 JVM 中创建注册表LocateRegistry.createRegistry(),所有随后导出的远程对象都将使用该端口,除非它们指定不同的端口或使用服务器套接字工厂。

但是... RMI 已经包含“开箱即用”的 HTTP 隧道。无需外部解决方案。您必须在服务器端部署随 JDK 提供的 RMI-Servlet。

于 2013-11-07T21:27:46.947 回答
0

(a) 虽然不是最新时尚,但使用 Hessian 和 Burlap 公开远程服务似乎是避免跨防火墙工作问题的简单解决方案:http: //hessian.caucho.com/doc/

请参阅服务器和客户端的示例代码: http ://www.javatpoint.com/spring-remoting-by-hessian-example

(b) 或考虑使用 Spring HttpInvokder(请参阅此处的一些示例代码:http ://www.javatpoint.com/spring-remoting-by-http-invoker-example )

HttpInvokder 通过 RemoteInvocationFactory、RemoteInvocationExecutor 和 HttpInvokerRequestExecutor 策略提供了更多的自定义选项(例如,为远程调用添加自定义上下文信息(如用户凭据),或者使用 java 的内置对象序列化等),参见: http:// /docs.spring.io/spring-framework/docs/2.0.x/api/org/springframework/remoting/support/RemoteInvocationFactory.html

于 2015-02-05T16:04:40.073 回答