|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
!!请教一个RMI的小问题!!
刚开始就不行了,所有代码如下:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIIntf extends java.rmi.Remote
{public String tt()throws java.rmi.RemoteException;
}
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class RMIImlp extends UnicastRemoteObject implements RMIIntf
{public RMIImlp()throws RemoteException{}
public String tt()
{System.out.println("服务器收到一条信息");
return "这是返回信息,请收取!";
}
}
import java.rmi.*;
import java.rmi.server.*;
public class RMIServer
{public static void main(String args[])
{if(System.getSecurityManager()==null)
{System.setSecurityManager(new RMISecurityManager());
}
try
{RMIImlp remoteObj=new RMIImlp();
Naming.rebind("//127.0.0.1/text",remoteObj);
}
catch(Exception e)
{System.err.println("hhh"+e);
}
}
}
import java.rmi.*;
import java.math.*;
public class RMIClient
{public static void main(String args[])
{if(System.getSecurityManager()==null)
{System.setSecurityManager(new RMISecurityManager());
}
try
{Object aa=Naming.lookup("RMI://127.0.0.1/text");
RMIIntf xx=(RMIIntf)aa;
String s=xx.tt();
System.out.println(s);
}
catch(Exception e)
{System.err.println("jjjjjjjjjj");
}
}
}
抛出如下异常,请问是什么原因,多位请帮帮忙,多谢了! |
要么你没仔细看书,要么你看的那本书是抄别人的,把这个重要的安全问题忽略了。RMI需要强安全措施,所以使用了SecurityManager,相对应的,你也应给配置一个policy文件给服务器,让它打向客户端开放相应的权限,如果不开放权限,你就会得到这个错误。java提供了一个policytool程序,可以帮助你创建poilcy文件,具体的例子可以去网上搜索以下。 |
[list]
[list=1]
[*]The RMI tutorial (by Sun): http://java.sun.com/docs/books/tutorial/rmi/
[*]Fundamentals of RMI Course (by jGuru): http://developer.java.sun.com/developer/onlineTraining/rmi/
[/list]
如同版主所说的, 你需要在policy文件中制定socket permission
grant{
....
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
.....
}
并且还有你的FilePermission.
|
也可以根据http://www.hta-bi.bfh.ch/Projects/jass/docbkx_html/rmi.html
上面说的, 装一个eclipse的插件, 来做RMI |
多谢大家的热心帮助,policy文件我是有的,上次我问老师他跟我说那个policy文件里的东西只是些配制信息,可有可无,不过当时他也没给解决到问题。我是完全按书上说的做的。 |
| |