【问题标题】:Security Exception for RMI in TomcatTomcat 中 RMI 的安全异常
【发布时间】:2013-12-04 15:21:34
【问题描述】:

当使用 server.policy 作为 Tomcat7 Servlet 运行时,我的 RMI 服务器似乎没有运行。

我的策略文件和代码库正在我的服务器上运行。

我的 server.policy 位于 /home/foo/policyfiles/server.policy。

我仍然遇到一些异常,抱怨我的 java.rmi.server.hostname 属性。

我正在使用这些代码行来检查 SecurityManager 是否正在运行:

if (System.getSecurityManager() == null) {
        System.setSecurityManager(new RMISecurityManager());
}

在我这样做之后,我为 JVM 设置了我的策略文件,使用 inputstream 从属性文件加载。

System.setProperty("java.security.policyfile", serverProperties.getProperty("foo.server.rmi.security.policy", null));

我的属性文件中的行如下所示:

foo.server.rmi.security.policy = /home/foo/policyfiles/server.policy

我的 server.policy 如下所示:

grant codeBase "/home/foo/lib/*" signedBy "foo" {
permission java.net.SocketPermission "*" "accept, connect, resolve, listen";
permission java.lang.RuntimePermission "*";
permission java.io.FilePermission "<<ALL FILES>>", "read";
permission java.util.PropertyPermission "*", "read, write";
permission java.util.logging.LoggingPermission "control";
};

尽管如此,我还是得到了这个例外:

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.hostname" "write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
        at java.security.AccessController.checkPermission(AccessController.java:559)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.System.setProperty(System.java:782)
        at com.foo.bl.server.Server.loadConfig(Server.java:114)
        at com.foo.bl.server.Server.start(Server.java:44)
        at com.foo.bl.servlet.ServletHandler.run(ServletHandler.java:187)
        at java.lang.Thread.run(Thread.java:724)

似乎这个小属性在我的 RMI 服务器类中搞得一团糟:

System.setProperty("java.rmi.server.hostname",
                    serverProperties.getProperty("foo.server.rmi.hostname", null));

我不明白,我设置了我的策略文件,创建了一个安全管理器,添加了策略文件的路径,并设置了引发异常的属性。

是卡特琳娜在做这个吗?就像从未读取过策略文件之类的..

请帮帮我!

谢谢!

【问题讨论】:

    标签: java tomcat tomcat7 rmi javapolicy


    【解决方案1】:

    需要先设置策略文件,否则无效。但我不认为在 servlet 容器中安装安全管理器是不道德的。

    【讨论】:

    • 好的,你的意思是我应该在 policy.d/ 中授予 catalina.policy 和 webbapps.policy 的权限,而不是创建新的 RMISecManager?我还需要设置 server.policy 属性吗?
    • 通过使用tomcat策略而不是server.policy解决了。
    猜你喜欢
    • 2010-10-11
    • 2013-04-04
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2011-03-09
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多