假设我正在编写一些执行客户端代码的环境(Java)。客户端发送带有清单信息的jar。环境从jar创建一些类实例(假设是Runnable的实例),并在某个线程中运行它。但我需要保证客户代码不会启动自己的线程或创建自己的ExecutorService等。
安全经理是否有可能执行此级别的限制?如果是这样,我如何才能做到这一点呢?
发布于 2009-12-12 12:56:59
我能想到的最好的方法是使用AspectJ来做一些运行时编织,如果创建了任何其他线程/runnables,那么要么抛出错误,要么以某种方式通知用户他们有问题。
然后,您可以实现各种安全协议,例如,您不仅可以阻止线程,还可以阻止任何系统调用,例如,就像您可以禁止动态查询而只允许预准备语句一样。
否则,您可能需要使用反射器API执行此类型的实现。
发布于 2009-12-12 12:57:28
我认为你需要扩展SecurityManager并使用你自己的实现。
这个论坛:http://forums.sun.com/thread.jspa?threadID=761922讨论了如何重写SecurityManager.checkAccess(ThreadGroup)来阻止线程创建,但听起来好像没有特定的"create thread y/n“权限。
https://stackoverflow.com/questions/1892238
复制相似问题