Java 无法使RMI安全策略正常工作

Java 无法使RMI安全策略正常工作,java,rmi,security-policy,Java,Rmi,Security Policy,我无法让RMI安全策略正常工作。我在服务器和客户端上都有一个.policy文件,每个文件都运行一个SecurityManager 当我尝试运行客户端时,它失败了。我的政策文件批准了一切。内容如下: grant { permission java.security.AllPermission }; 我在JAR文件的根目录中有client.policy文件,我也尝试在JAR之外运行该文件。然后,我使用以下命令运行客户端: java -jar PagePlanner.jar -Djava.secur

我无法让RMI安全策略正常工作。我在服务器和客户端上都有一个.policy文件,每个文件都运行一个SecurityManager

当我尝试运行客户端时,它失败了。我的政策文件批准了一切。内容如下:

grant { permission java.security.AllPermission };
我在JAR文件的根目录中有client.policy文件,我也尝试在JAR之外运行该文件。然后,我使用以下命令运行客户端:

java -jar PagePlanner.jar -Djava.security.policy=client.policy -Djava.rmi.codebase=http://192.168.0.88:2077/home/me/NetbeansProjects/PageServer/dist/PageServer.jar -Djava.security.debug=access
指定策略文件和代码库的路径。我不确定这两种说法是否正确。我还尝试设置调试开关,因为我在某个地方读到,它应该会为我提供有关出错原因的额外信息,但它似乎没有什么区别。以下是我运行客户端时的输出:

Exception in thread "main" java.security.AccessControlException: access denied (java.awt.AWTPermission setWindowAlwaysOnTop)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.awt.Window.setAlwaysOnTop(Window.java:2038)
    at gui.LoginForm.<init>(LoginForm.java:59)
    at main.Main.main(Main.java:21)
从这一点开始,客户端就挂起了。知道我做错了什么吗?服务器端的策略设置基本相同。如果有帮助,我可以发布详细信息


干杯。

使用-Djava.security.debug=access,failure运行客户端。很可能找不到您的.policy文件


顺便说一句,您不需要在客户端设置代码库,除非客户端有自己的抽象类/接口实现,而服务器不知道它们。代码库通常只在服务器上设置,以便对下载到客户端和注册表的类进行注释。

出于某种原因,Djava.security.debug=access,failure没有给我任何输出。不知道为什么会这样,最后我修改了系统范围的策略文件,暂时删除了客户端交换机。然后,我又遇到了几个问题,您似乎已经在其他站点上回答了这些问题-因此,感谢您:EJP关于java.security.debug参数值的说法是正确的,尽管语法略有不同。像这样试试:-Djava.security.debug=“access,failure”@Florin:我从来没有使用过这些引号。这只是命令处理器外壳在逗号处分隔参数的问题。我已经32年没用过了-