Topic: re: RMI and port 1099

  Print this page

1.re: RMI and port 1099 Copy to clipboard
Posted by: sothis
Posted on: 2003-01-17 15:59

本文回答
http://www.chinajavaworld.net/forum/topic.cgi?forum=33&topic=270&show=0

Java RMI缺省使用1099端口作为rmiregistry的工作端口,这样,只要程序(无论是服务器端还是客户端)是通过rmiregistry去发布或消费服务,就必须透过1099端口和外界联系(缺省)。
所以当新手们碰到
Error:java.security.AccessControlException:
access denied(java.net.SockerPermission 127.0.0.1:1099 connect,resolve)
异常的时候,往往不知道到底是什回事,因为程序里面是没有表明有这样的一个端口被使用的。出现这个异常表明运行服务器或客户程序时权限配置有问题。
要知道对于RMI的C/S之间通信,就像Applet和WebServer之间通信一样,是要受Java的安全沙箱模型约束的。缺省情况下客户端和服务器端的代码没有权限存取硬盘/访问网络等等,这些权限必须在启动客户端和服务器端程序的时候加进去。
通过书写一个policy文件,我们可以指定安全策略,如
grant codebase "file:d:/jdk/test/rmi/server"
{
permission java.net.SocketPermission "127.0.0.1","accept,connect,listen,resolve";
};
上面的策略表明从d:/jdk/test/rmi/server目录下面启动起来的java类可以在本机上任意操纵网络。注意windows上的程序员容易使用错误的\分隔符来代替/分隔符造成问题。
假定该文件名为RmiHelloServer.policy,那么启动客户端和服务器端程序的时候应该如下
java -Djava.security.policy=RmiHelloServer.policy RmiHelloServer


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923