Исключение безопасности для RMI в Tomcat
Кажется, мой RMI-сервер не работает при использовании server.policy в качестве сервлета Tomcat7.
Мой файл политики и кодовая база работают на моем сервере.
Мой server.policy находится в /home/foo/policyfiles/server.policy.
Я все еще получаю некоторые исключения, жалуясь на мое свойство java.rmi.server.hostname.
Я использую эти строки кода, чтобы проверить, работает ли SecurityManager:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Сразу после этого я установил файл политики для JVM, загруженный из файла свойств с использованием inputtream.
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";
};
Despite all this, i get this exception:
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)
It seems that this little property is doing the mess in my RMI server class:
System.setProperty("java.rmi.server.hostname",
serverProperties.getProperty("foo.server.rmi.hostname", null));
I don't get it, i set my policy file, creates a security manager, adds the path to the policy file, and sets the property making the exception.
Is it catalina doing this? It's like the policy file is never read or something..
Пожалуйста, помогите мне!
Спасибо!
1 ответ
Сначала нужно установить файл политики, иначе он не будет иметь никакого эффекта. Но я не верю, что установка менеджеров безопасности в контейнере сервлетов кошерна.