Próbuję zakazać połączenia z System.exit(int);
w niektórych słoikach.zabronić wywoływania System.exit
Te słoiki zostaną opracowane przez zewnętrzne zespoły i załadowane przez naszą aplikację "kontenerową".
Mój pierwszy odruch jest użycie menedżera zabezpieczeń Java:
-Djava.security.manager-Djava.security.debug=all
z najprostszych ${user.home}/.java.policy
pliku:
grant {};
Mimo, że nie można już nazwać takie jak System.getProperties() (od Nie mam java.util.PropertyPermission), mogę zrobić System.exit (0)!
Opcja java.security.debug=all
daje następujące konsoli:
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)
)
Dlaczego wszystkie klasy w moim-bin-path nie java.lang.RuntimePermission exitVM
przyznanej ?????
dzięki
Domyślnie 'java.lang.RuntimePermission exitVM' jest domyślnie przyznawana, może trzeba to wyraźnie zabronić. – Romain
Spodziewam się, że uprawnienia exitVM będą domyślnie włączone. Jeśli fragment kodu Java dojdzie do końca jego wykonania, być może potrzebuje niejawnego wywołania System.exit (0), aby powiedzieć maszynie wirtualnej, że jest to zrobione. – Chris
Zakładam jednak, że chcesz wiedzieć, jak to wyłączyć, zaleciłbym edytowanie pytania, aby to konkretnie zadać. – Chris