Sto provando a vietare la chiamata a System.exit(int);
in alcuni barattoli.proibire la chiamata a System.exit
Questi vasi verranno sviluppati da team esterni e caricati dalla nostra applicazione "contenitore".
mio primo riflesso è quello di utilizzare il gestore della sicurezza Java:
-Djava.security.manager-Djava.security.debug=all
con il file più semplice ${user.home}/.java.policy
:
grant {};
Anche se non posso più chiamare come System.getProperties() (dal Non ho java.util.PropertyPermission), posso fare un System.exit (0) !!
L'opzione java.security.debug=all
ha pronunciato la seguente console:
scl: getPerms ProtectionDomain (file: my-bin-path <no sign certificates>)
sun.misc.Launcher $ AppClassLoader @ 10385c1
<no principals>
java.security.Permissions @ 15b7986 (
(java.lang.RuntimePermission exitVM)
(java.io.FilePermission \my-bin-path\- read)
)
Perché tutte le classi nel mio-bin-path sono java.lang.RuntimePermission exitVM
concesso ?????
grazie
Apparentemente 'java.lang.RuntimePermission exitVM' è concesso per impostazione predefinita, forse è necessario negarlo esplicitamente. – Romain
Mi aspetto che l'autorizzazione exitVM sia attiva per impostazione predefinita. Se una parte del codice Java raggiunge la fine della sua esecuzione allora forse ha bisogno di chiamare implicitamente System.exit (0) per dire alla VM che è stata eseguita. – Chris
Suppongo che, se vuoi sapere come spegnerlo, ti consiglio di modificare la domanda per chiederglielo esplicitamente. – Chris