2013-04-06 5 views
0
System.exit(0); or 
System.exit(2); 

является posiible выполнить без ошибок, бега сSystem.exit (0) без гранта возможен в соответствии с менеджером безопасности

java -Djava.security.manager -Djava.security.policy==app.policy -cp bin pl.com.App 

app.policy:

grant { 
     permission java.io.FilePermission "./*", "read,write"; 
     permission java.net.SocketPermission "localhost:18080", "accept, connect, listen"; 
     //permission java.util.PropertyPermission "java.home", "read"; 
}; 

менеджером безопасности для записи файл работает правильно, когда я удаляю грант из app.policy, я правильно получаю Exception при выполнении нового FileWriter («out.txt»);

C: \ workspace_tomcat \ secureWeb> Java -версия

java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode) 

когда я бегу System.exit (0); в webapp под Tomcat с менеджером безопасности, я правильно получаю исключение.

+1

Не могли бы вы изложить свой вопрос? –

+0

Почему можно выполнить без исключения System.exit (0) при запуске под управлением безопасности без соответствующего разрешения (разрешение java.lang.RuntimePermission «exitVM.0»)? – bastiat

ответ

2

Javadoc состояния (http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html):

Примечание: "exitVM *" разрешение автоматически предоставляется всем кодам, загруженным из пути класса приложений, таким образом, позволяя приложениям прекратить себя

Это применяется, когда вы запускаете свой код как независимое приложение. То же самое относится и к Tomcat - он может отключиться. НО это не расширен для программ, запущенных в контейнере Tomcat. Эти программы полностью контролируются менеджером по безопасности Tomcat: (http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html)

+0

Alex, THX за помощью, я был (неправильно) предложенный http://docs.oracle.com/javase/6/docs/api/java/lang/SecurityManager.html#checkExit%28int%29 – bastiat

+0

Я должен извинить себя , Я не был так ленив и даже не читал себя выше javadoc, но для java 6 (который я использую), и он только утверждает: Это позволяет злоумышленнику монтировать атаку типа «отказ в обслуживании», автоматически заставляя виртуальную машину остановить. http://docs.oracle.com/javase/6/docs/technotes/guides/security/permissions.html – bastiat

+0

Алекс, в теме securitymanager, вы также можете увидеть http://stackoverflow.com/questions/15868534/why -security-manager-doesnt-forbid-not-create-new-thread-nor-start-i, thx заранее – bastiat