什么时候应该使用AccessController.doPrivileged()?
如果我理解AccessController.doPrivileged正确,它是说,不可信代码应能够调用要求的权限(例如,方法System.getProperty()
)通过一个中间方法 确实
有权限。
这就提出了一个问题:什么时候应该AccessController.doPrivileged()
使用?什么时候应该允许不可信代码通过中间方法调用特权代码?什么时候应该失败?
按照您的推理,请解释为什么应始终允许创建ClassLoader:http
:
//findbugs.sourceforge.net/bugDescriptions.html#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
回答:
同意Suraj的回答,但以为我会在需要使用特权块的地方添加一个具体示例。
想象一下,您已经构建了一个为可插拔模块提供大量服务的应用程序。因此,您的应用及其服务是受信任的代码。但是,可插拔模块不一定是受信任的,而是在其自己的类加载器中加载(并具有自己的保护域)。
当可插拔模块调用服务时,您正在实现自定义安全检查(“可插拔模块X是否具有使用此服务的权限”)。但是服务本身可能需要一些核心Java权限(读取系统属性,写入文件等)。需要这些权限的代码被包装为,doPrivileged()
以便有效地忽略来自不受信任的可插拔模块的不足权限-
仅适用于受信任的服务模块的特权。
以上是 什么时候应该使用AccessController.doPrivileged()? 的全部内容, 来源链接: utcz.com/qa/425675.html