Tomcat AccessControlException, несмотря на использование AllPermission

Я пытаюсь развернуть WAR на Tomcat и столкнулся с проблемами с Java Security Manager. Это Tomcat 7.0.55 с Java 1.8.0, и Tomcat запускается с такими параметрами:

-Dcatalina.base="/path/to/apache-tomcat-7.0.55"
-Dcatalina.home="/path/to/apache-tomcat-7.0.55"
-Djava.endorsed.dirs="/path/to/apache-tomcat-7.0.55\endorsed"
-Djava.security.manager
-Djava.security.policy="/path/to/config/custom_catalina.policy"

Здесь важно то, что он включает Java Security Manager, а затем указывает ему пользовательскую политику безопасности, которая выглядит следующим образом:

grant {
    permission java.security.AllPermission;
};

Похоже, это должно привести к довольно бессмысленной настройке активации менеджера безопасности, а затем сказать ему просто разрешить все (я не запускаю сервер, так что не обвиняйте меня!). Однако, когда я развертываю свой WAR, он терпит неудачу с несколькими трассировками стека, содержащими такие вещи, как:

Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.version" "read")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457) ~[?:1.8.0_51]
    at java.security.AccessController.checkPermission(AccessController.java:884) ~[?:1.8.0_51]
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[?:1.8.0_51]
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294) ~[?:1.8.0_51]
    at java.lang.System.getProperty(System.java:753) ~[?:1.8.0_51]
    at org.apache.commons.lang3.JavaVersion.maxVersion(JavaVersion.java:196) ~[commons-lang3-3.4.jar:3.4]

Я попытался явно предоставить AllPermission своему собственному приложению, например:

grant codeBase "file:${catalina.home}/webapps/myApp/-" {
    permission java.security.AllPermission;
};

и даже явно предоставляя PropertyPermission читать java.version. Ничего из этого не имеет значения. Те же AccessControlException все еще выбрасываются и препятствуют развертыванию.

Что здесь происходит? Как я могу устранить эту проблему?


person jpappe    schedule 25.08.2016    source источник
comment
Вы когда-нибудь решали это?   -  person PhilW    schedule 04.03.2017
comment
Увы, нет. Решением было отключить Security Manager.   -  person jpappe    schedule 13.03.2017
comment
Спасибо за ответ! Использовал ли ваш код ForkJoinPool? Это то, что вызвало проблему для меня. Если SecurityManager присутствует и фабрика не указана, то пул по умолчанию использует фабрику, поставляющую потоки, для которых не включены разрешения.   -  person PhilW    schedule 13.03.2017


Ответы (1)


Наш не пришел во время развертывания, а во время тестирования под большой нагрузкой.

Мы изменили коннектор в server.xml с Nio2 на Nio, и это решило проблему для нас org.apache.coyote.http11.Http11NioProtocol (первая версия NIO вместо NIO2).

Мы не отключали менеджер безопасности tomcat, это противоречит политике нашей фирмы.

person Sandeep Khantwal    schedule 12.09.2019