【问题标题】:Having Trouble Getting RMI Security Policy Working无法使 RMI 安全策略正常工作
【发布时间】:2012-04-20 05:12:13
【问题描述】:

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

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

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)

从那一刻起,客户端就挂了。有什么想法我在这里做错了吗?服务器端的策略设置几乎相同。如果有帮助,我可以发布详细信息。

干杯。

【问题讨论】:

    标签: java rmi security-policy


    【解决方案1】:

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

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

    【讨论】:

    • 出于某种原因-Djava.security.debug=access,failure 没有给我任何输出。不知道为什么会这样,最后我修改了系统范围的策略文件并暂时删除了客户端开关。然后我又遇到了几个问题,您似乎已经在其他网站上回答了这些问题 - 所以谢谢你:)
    • EJP 关于 java.security.debug 参数值是正确的,但语法略有不同。像这样尝试:-Djava.security.debug=”access,failure”
    • @Florin:我从来不用这些引号。这只是用逗号分隔参数的命令处理器(shell)的问题。我已经有 32 年没用过其中之一了;-)
    猜你喜欢
    • 2019-11-24
    • 2010-09-14
    • 2021-10-26
    • 2011-02-25
    • 2020-09-05
    • 2022-10-24
    • 1970-01-01
    • 2012-09-28
    • 2023-04-11
    相关资源
    最近更新 更多