Java安全类,防止您使用exit(0)终止代码!在哈克朗克

Java安全类,防止您使用exit(0)终止代码!在哈克朗克,java,system.exit,Java,System.exit,有人能解释一下黑客银行的代码吗 class DoNotTerminate { public static class ExitTrappedException extends SecurityException { private static final long serialVersionUID = 1; } public static void forbidExit() { final SecurityManager sec

有人能解释一下黑客银行的代码吗

class DoNotTerminate {

    public static class ExitTrappedException extends SecurityException {    
        private static final long serialVersionUID = 1;
    }

    public static void forbidExit() {
       final SecurityManager securityManager = new SecurityManager() {
           @Override
           public void checkPermission(Permission permission) {
              if (permission.getName().contains("exitVM")) {
                  throw new ExitTrappedException();
              }
           }
       };
       System.setSecurityManager(securityManager);
    }
}

以下代码将阻止您使用退出(0)终止代码

当程序试图通过调用
System.exit(…)
来停止JVM时,它首先通过询问安全管理器是否授予
exitVM
权限来检查此操作是否被允许

您发布的代码将安全管理器替换为自定义安全管理器,该安全管理器在检查
exitVM
权限时将抛出
ExitTrappedException

那么,发生的情况是:

  • 用户程序调用系统。退出(…)
  • System.exit(…)
    方法询问安全管理器是否允许
    exitVM
    权限
  • 自定义安全管理器抛出一个ExitTrappedException
  • System.exit(…)
    不会继续停止JVM,而是将异常传递给调用方;JVM一直在运行