每个线程的 Java 安全管理器
Posted
技术标签:
【中文标题】每个线程的 Java 安全管理器【英文标题】:Java Security manager per thread 【发布时间】:2011-07-19 08:53:33 【问题描述】:我想在受限制的沙箱中运行特定的线程类,而应用程序的其余部分可以不受限制地运行。
是否可以仅为特定线程类附加安全管理器?
--
编辑:使用 Peter 的提示,我在自定义安全管理器中创建了以下变量:
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'。
我做错了什么?
【问题讨论】:
【参考方案1】:您可以创建一个仅检查一个线程(或具有 InheritableThreadLocal 的每个线程)的安全管理器。使用 InheritableThreadLocal 的好处是所有衍生的线程也将被检查。
【讨论】:
我写了一篇博文,详细介绍了每线程 SecurityManager 的外观:alphaloop.blogspot.com/2014/08/…以上是关于每个线程的 Java 安全管理器的主要内容,如果未能解决你的问题,请参考以下文章
在具有动态大小的内存池的多线程 C/C++ 中实现内存管理器?