但有时侯,防火墙会把客户端同服务器隔离开(见图2)。在一个典型的例子中,一个胖客户端(thick
client)(如一个基于Swing的客户端)与一个应用程序服务器交互。(这些客户端通常用诸如Java
Web Start这样的技术来安装,所以最终用户既可以得到自动化部署的好处,也可以得到一个富客户端的好处。)
这就会出现一个问题。Remote Method Invocation(RMI)是在Java
Remote Methods Protocol(JRMP)、Internet Inter Orb
Protocol(IIOP)、或一个如T3的私有协议上实现的。要穿越防火墙实现RMI而又不在防火墙中另外打洞,就需要我们采用一些方法。
第一步是实现安全套接库(secure socket libraries)。你可以在JavaSoft的Java
Development Kit(JDK)文件包中找到这些类。实现这个套接库的类是RMISSLServerSocketFactory.java和RMISSLClientSocketFactory.java。现在,我们来看看实现这些安全套接库的代码。
创建一个SSL server socket,并返回它让J2EE容器使用(见列表1)。通过运用JDK中捆绑的keytool就生成了keystore。该文件作为testkeys存储,可以访问该socket。这个文件必须可以在包含套接库的.jar文件的根目录中找到,而且可以从该位置下载key
store。