在我们的应用程序中,用户可以定义由我们的主引擎执行的Java表达式(这些表达式只是方法调用:例如,Math.abs(42)).他们是通过反思来执行的.
什么是不同的解决方案,以防止这些表达式调用例如System.exit(但也有文件访问和其他...)直接或通过方法调用,内部最终调用System.exit?
请注意,可以在不同的线程中执行几个不同的表达式.防止例如使用SecurityManager进行文件访问不起作用,因为主表必须仍能够在执行表达式时访问文件系统.
你错误的说你不能使用SecurityManager- 这正是它的用途:托管不受信任的代码,如在Applet容器或RMI服务器中.现代SecurityManager配置了策略文件,这些文件授予特定的细粒度权限,包括对文件系统的有限访问权限.您需要使用SecurityManager,但您需要成为其中的专家.
这是一个巨大的话题; 最好的办法是谷歌"Java安全策略文件",只需阅读你能做的一切.