跳到主要内容

JEP 140:有限的特权

概括

使代码能够断言其权限的子集,而不会阻止完整的访问控制堆栈遍历以检查其他权限。

动机

当您需要启用某些权限同时允许其他权限继续堆栈遍历时,这非常有用。

描述

添加一个java.security.AccessController.doPrivileged采用权限参数的方法。

例如,某些引导 JRE 代码可以断言通过 http 获取配置文件的权限:

AccessController.doPrivileged(anon class...,
new URLPermission(url,
request props ...,
"GET") ...

checkPermission()匹配的A URLPermission(由处理程序完成http)将在该调用处停止遍历访问控制上下文 (acc) 堆栈doPrivileged()并成功。然而,对不匹配URLPermission或某些其他权限的检查将匹配 JRE 类通常分配的权限,并继续遍历完整的 acc 堆栈,就好像doPrivileged()尚未调用受限一样。

getAccessControlContext()这些有限的特权也由线程继承捕获。