通过继承SecurityManager实现系统退出检查
2017-02-19 17:47
281 查看
有时会遇到一个问题,系统运行时忽然退出,怀疑执行了System.exit方法,但是无法排查是哪里调用。可通过java的SecurityManager机制来进行检查。
实现一个继承SecurityManager的子类,重写checkExit方法,并通过 -Djava.security.manager设置,就可监测到哪里执行了System.exit方法。
如下列代码,将执行了System.exit方法打印出来
实现一个继承SecurityManager的子类,重写checkExit方法,并通过 -Djava.security.manager设置,就可监测到哪里执行了System.exit方法。
如下列代码,将执行了System.exit方法打印出来
public class ExitPrintSecurityManager extends SecurityManager { private final int runtimeStackIndex = 3; @Override public void checkExit(int paramInt) { String exitName = "Runtime.exit"; StackTraceElement[] stack = Thread.currentThread().getStackTrace(); if (stack.length > runtimeStackIndex) { int sourceIndex = runtimeStackIndex; StackTraceElement source = stack[sourceIndex]; if ("java.lang.System".equals(source.getClassName()) && "exit".equals(source.getMethodName())) { source = stack[++sourceIndex]; exitName = "System.exit"; } System.out.println(exitName + " in " + source); System.out.println("Stack trace as follows:"); printStack(sourceIndex, stack); } else { System.out.println("Can not print System.exit"); } } private void printStack(int sourceIndex, StackTraceElement[] stack){ for (int i = sourceIndex - 1; i < stack.length; i++) { System.out.println(" " + stack[i]); } } @Override public void checkPermission(Permission perm, Object context) { // allow anything. } @Override public void checkPermission(Permission paramPermission) { // allow anything. } }
相关文章推荐
- VC下通过系统快照实现进程管理
- 通过UniObject的标准化协议,实现即插即用式的系统通信
- jBPM与业务系统集成-通过定制Task Instance等方式实现
- PHP 通过WMI来实现获取客户端计算机硬件及系统信息:
- 通过更改字库文件组件及相关设置实现对NK进行裁剪(尤其适用中文简体系统)
- web下用JavaScript实现系统的注销与退出
- linux下通过字符模块实现类似ps命令的查看系统进程方法
- linux服务器通过设置mysql,apache为系统服务,实现开机启动
- Linux 系统下通过脚本实现远程自动备份
- 7.0下通过CARP+PF+relayd+PFSYNC实现健康检查等功能群集[转]
- 通过sql server的作业调度+存储过程来实现系统定时任务的方法
- JAVA定时器实现之一(通过继承TimerTask)
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- jBPM与业务系统集成-通过定制Task Instance等方式实现
- [个人推荐]通过Erlang轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统[zz from 神宗冥浩]
- 方案一:通过继承TextBoxBase类实现
- 通过继承parent类实现CheckRole
- 通过Visual studio 2005 中的web.sitemap实现OUTLOOK风格的系统菜单
- 通过编写rcS文件实现系统启动后进行一系列初始设置
- 通过更改字库文件组件及相关设置实现对NK进行裁剪(尤其适用中文简体系统)