Java Security 类可防止您使用 exit(0) 终止代码!在 HackerRank

Posted

技术标签:

【中文标题】Java Security 类可防止您使用 exit(0) 终止代码!在 HackerRank【英文标题】:Java Security class to prevent you from terminating the code using exit(0)! in 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) 终止代码!

【问题讨论】:

【参考方案1】:

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

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

那么,会发生什么:

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

【讨论】:

以上是关于Java Security 类可防止您使用 exit(0) 终止代码!在 HackerRank的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 将 unix 纪元转换为人类可读时的日期不正确

防止 java 代理在运行时附加

如何使扩展非可序列化的java类可序列化

使用 javaconfig 拒绝访问 Spring Security

如何防止使用带有 Thymeleaf 的 Spring Security 破坏 CSS 格式?

如何在 Java 中将 CamelCase 转换为人类可读的名称?