我正在尝试为RMI做一个简单的程序。但是,我在运行该行时遇到以下异常 Naming.rebind( “interfacename都”,Remoteserverobject);
java.security.AccessControlException: 拒绝访问 (java.net.SocketPermission 127.0.0.1:1099连接,解决)
我的代码如下:
public static void main(String[] args) throws Exception {
if(System.getSecurityManager()==null)
{
System.setSecurityManager(new RMISecurityManager());
}
Remoteserver objremoteserver=new Remoteserver();
objremoteserver.setmsg("Hello! How are you?");
System.out.println(objremoteserver.getmsg());
try
{
Naming.rebind("Remotemethod", objremoteserver);
System.out.println("Server Started");
}
catch(RemoteException re)
{
System.out.println(re.getLocalizedMessage());
}
finally
{
System.out.println("Unknown Exception Occured!!!!");
}
}
如何克服这个问题。提前致谢
答案 0 :(得分:1)
除非(i)您知道需要安全管理器,并且(ii)您已编写了适当的.policy文件,否则请勿使用安全管理器。如果您认为这两个都适用,请使用-Djava.security.debug = access运行您的问题,无法查看实际出现的问题。很可能您没有授予自己所需的权限,或者您没有正确指定策略文件位置。
答案 1 :(得分:0)
确保按照here
的说明设置了RMISecurityManager答案 2 :(得分:-1)
我想这可行
public static void main(String[] args) throws Exception {
Remoteserver objremoteserver=new Remoteserver();
objremoteserver.setmsg("Hello! How are you?");
System.out.println(objremoteserver.getmsg());
try
{
Naming.rebind("Remotemethod", objremoteserver);
System.out.println("Server Started");
}
catch(RemoteException re)
{
System.out.println(re.getLocalizedMessage());
}
finally
{
System.out.println("Unknown Exception Occured!!!!");
}
}
每个JRE都有一个默认的安全管理器,U r试图用新的安全管理器覆盖。你为这个新的安全管理器指定了任何属性。所以错误。解决方案是使用默认管理器创建一个全新的安全管理器,遵循这些instructions。