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()
这些有限的特权也由线程继承捕获。