仅对某些类允许System.exit

时间:2014-05-19 15:37:30

标签: java securitymanager system.exit

我们正在使用支持插件的Java 1.7应用程序,客户可以使用Java编写自己的插件。我们想要限制插件来调用System.exit。我们可以通过SecurityManager来完成。但是,在核心应用程序中,我们想要调用System.exit时很少见。有没有办法从SecurityManager中排除类或包?

2 个答案:

答案 0 :(得分:3)

与Batty的答案类似,但您可以再次禁用设置安全管理器并覆盖checkExit()方法。我要做的是允许调用System.exit()但这应该触发插件停止/卸载而不是退出整个JVM。

您可以使用Thread.currentThread()。getStackTrace()来计算出名为System.exit()的代码;

答案 1 :(得分:1)

我认为你正在寻找这个:

private static class ExitTrappedException extends SecurityException 
{ 
} 
private static void forbidSystemExitCall()
{ 
    final SecurityManager securityManager = new SecurityManager() { 
         public void checkPermission( Permission permission ) 
        { 
              if( "exitVM".equals( permission.getName() ) ) 
            {  
                    throw new ExitTrappedException() ; 
            }
        }
    } ; 
    System.setSecurityManager( securityManager ) ; 
} 

private static void enableSystemExitCall() 
{  
       System.setSecurityManager( null ) ; 
}

这是在你的类中,从中调用插件。

forbidSystemExitCallenableSystemExitCall之间拨打电话。