Следующий код запускает файл с использованием LOG4J (и SLF4J):
package test;
import java.rmi.RMISecurityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestMain {
private static final Logger logger = LoggerFactory.getLogger(TestMain.class);
public static void main(String[] args) throws Exception {
System.setProperty("java.security.policy", "./src/main/config/java.policy");
logger.debug("Policy location: {}", System.getProperty("java.security.policy"));
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
System.setProperty("java.security.policy", "./src/main/config/java.policy");
}
}
При переключении зависимостей на «logback» вместо log4j он дает:
01:05:37.702 [main] DEBUG test.TestMain - Policy location: ./src/main/config/java.policy
Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission java.security.policy write)
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.lang.System.setProperty(System.java:725)
at test.TestMain.main(TestMain.java:18)
напоследняя строка метода main.
Содержимое файла java.policy:
grant {
permission java.security.AllPermission;
};
Помещение файла java.policy в «$ JAVA_HOME / jre / lib / security» решаетвыпуск.
Кто-нибудь может сказать мне, что происходит?