【问题标题】:Java Security class to prevent you from terminating the code using exit(0)! in HackerRankJava Security 类可防止您使用 exit(0) 终止代码!在 HackerRank
【发布时间】:2020-10-24 05:25:35
【问题描述】:

谁能解释一下 HackerRank 的这段代码?

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);
    }
}

以下代码将阻止您使用 exit(0) 终止代码!

【问题讨论】:

    标签: java system.exit


    【解决方案1】:

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

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

    那么,会发生什么:

    1. 用户程序调用System.exit(...)
    2. System.exit(...) 方法询问安全管理员是否允许 exitVM 权限
    3. 自定义安全管理器抛出ExitTrappedException
    4. System.exit(...) 不会继续停止JVM,而是将异常传递给调用者; JVM 继续运行

    【讨论】:

      猜你喜欢
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多