在Java中如何阻止使用System.exit(0)退出应用?

在某些特殊的情况,可能需要阻止System.exit(int)的调用,比如说防止某些依赖的第三方库调用这个API导致整个应用都退出。

javaexitSecurityManager
1
184
小课
小课2022-06-09 23:04
1 个回答

使用SecurityManager可以在调用System.exit(int)之前进行检查,如果不满足可以抛出异常来防止应用退出。

1class MySecurityManager extends SecurityManager {
2
3    @Override
4    public void checkExit(int status) {
5        if (!shouldExit()) {
6            throw new SecurityException();
7        }
8    }
9    
10    private boolean shouldExit() {
11        ...
12    }
13}
14
15System.setSecurityManager(new MySecurityManager());

如果程序中调用了System.exit(int),就会执行到MySecurityManager.checkExit(int)方法,在这里可以进行一些判断,如果不符合退出条件就抛出SecurityException异常,这样在System.exit(int)的调用处就会接收到SecurityException异常,而不是退出应用。

1
小课
小课2022-06-09 23:27
你的回答

内容