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 纪元转换为人类可读时的日期不正确
使用 javaconfig 拒绝访问 Spring Security