我想在受限制的沙箱中运行特定的线程类,而应用程序的其余部分可以不受限制地运行。
是否可以仅为特定线程类附加安全管理器?
--
编辑:使用彼得的提示,我在自定义安全管理器中创建了以下变量:
private static ThreadLocal<Boolean> isChatbot = new InheritableThreadLocal<Boolean>() {
@Override protected synchronized Boolean initialValue() {
boolean value = (Thread.currentThread() instanceof ChatBot);
return value;
}
@Override protected synchronized Boolean childValue(Boolean parentValue) {
boolean value = (Thread.currentThread() instanceof ChatBot || parentValue);
return value;
}
};
ChatBot 是我想要限制运行的特定线程类。因此,在 initialValue 中,我将值“true”分配给所有 ChatBot 线程,在 childValue 中,我还将值“true”分配给 ChatBot 线程产生的所有子线程。
奇怪的是,这不起作用。我在 childValue 中放置了一个断点,我看到执行永远不会到达那里,所以子线程的值是“false”。
我究竟做错了什么?