当使用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
我的服务器策略如下:
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));
我不明白,我设置了我的策略文件,创建了一个安全管理器,添加了策略文件的路径,并设置了导致异常的属性。
是卡塔琳娜在做这个吗?这就像从未读取过策略文件之类的。。
请帮帮我!
谢谢
您需要先设置策略文件,否则将无效。但我不认为在servlet容器中安装安全管理器是符合犹太教义的。