如何为此线程而不是系统设置 SecurityManager?

Posted

技术标签:

【中文标题】如何为此线程而不是系统设置 SecurityManager?【英文标题】:How to set a SecurityManager for this thread and not for System? 【发布时间】:2008-11-17 09:16:38 【问题描述】:

我有一个在其所有线程中运行基本 RMISecurityManager 的程序。但是我想对几个线程做更多的控制,并专门为这些线程设置另一个 SecurityManager。

我该怎么做? ...如果这是可能的!?

提前谢谢你。

编辑:我找到了我的解决方案。 See here 了解更多详情。

【问题讨论】:

【参考方案1】:

这没有多大意义。如果代码(无论是否恶意)导致在不同的线程上执行怎么办?这甚至可以在 Java 库中发生,并传输安全上下文(可能使用 java.security.AccessController.getContext/doPrivileged)。

Applet 确实使用了涉及ThreadGroups 的稍微困难的系统,但我不推荐它。 JAAS 允许将Subject 添加到AccessControlContext,但我个人建议不要使用这种编程风格。

授予下载的代码(如果有)适当的权限,不要将敏感对象授予您不信任的代码。

【讨论】:

事实上我们遇到了架构问题。我们的应用程序以 root 权限运行,并为每个任务创建一个线程。此任务必须根据用户具有特定权限。 我们采取的解决方案是扩展 RMISecurityManager 并使用 JNI。这适用于 ThreadLocal 变量。但问题是,它不适用于自动创建的线程,例如创建套接字时创建的线程。 为此,我想要一个用于所有内容的 securityManager,以及一个用于线程任务的...如果可能的话...【参考方案2】:

SecurityManager 根据正在运行的线程的安全上下文执行检查,也许您想让 SecurityManager 根据它在上下文中找到的任何内容做出不同的行为?

或者,您可能想使用策略模式来实现您的SecurityManager。

yc

【讨论】:

以上是关于如何为此线程而不是系统设置 SecurityManager?的主要内容,如果未能解决你的问题,请参考以下文章

您如何检测到已设置 TEvent?

你如何设置一些函数在后台线程中运行但保持正常的返回类型而不是 Task<int>?

如何将 ActionBar 标题设置在中间而不是默认的左对齐位置?

如何在 Flatpickr 中将给定时区设置为默认时区而不是系统时区?

如何在 iOS 8 上强制启动图像而不是启动屏幕?

多线程环境中的事件