我正在尝试运行在java rmi中开发的桌面应用程序。当我试图在eclipse中执行此应用程序时,我收到以下错误。请任何人提前帮助我。
Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
at java.lang.System.getProperties(Unknown Source)
at .HeadOfficeManager.Manager.main(Manager.java:103)
这是代码。
public static void main(String args[])
{
Manager frame = new Manager();
frame.setVisible(true);
// frame.show(); old 1.4
// Create and install a security manager
if (System.getSecurityManager()== null)
{
System.setSecurityManager(new RMISecurityManager());
}
try
{
Properties prop = System.getProperties();
String httpPath = prop.getProperty("HTTPPath");
new ClassFileServer(80, httpPath);
}
catch (IOException e)
{}
try
{
java.rmi.registry.LocateRegistry.createRegistry(1099);
System.out.println("RMI registry ready.");
}
catch (Exception e)
{
System.out.println("Exception starting RMI registry:");
e.printStackTrace();
}
try
{
RMIHandler = new ManagerRMIHandler();
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.rebind("HeadOfficeManager", RMIHandler);
System.err.println("Server ready");
}
catch (Exception e)
{
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
答案 0 :(得分:12)
-Djava.security.policy =java.policy.applet
。 java.policy.applet
。在该文件中添加以下行。
grant
{
permission java.security.AllPermission;
};
保存并运行该应用程序。
这将为您的Java应用程序提供所有安全权限。
答案 1 :(得分:2)
您已经安装了SecurityManager,并且在.policy文件中没有给自己足够的权限来执行您的代码。该异常会告诉您缺少哪些权限,但可能还有更多权限。使用-Djava.security.debug = access运行您的应用程序,无法查看其他安全问题。
但真正的问题是为什么安全经理?如果您使用RMI代码库功能,从RMI的角度来看,您只需要在RMI服务器中使用它。否则你应该考虑删除它。
此外,您必须将createRegistry
的结果存储在不会被垃圾回收的地方,例如在一个静态变量中。一旦你完成了这项工作,getRegistry()
电话就是多余的。