JEP 140: Limited doPrivileged | 有限的 doPrivileged
摘要
允许代码断言其权限的一个子集,同时不阻止完整的访问控制堆栈遍历以检查其他权限。
动机
当您需要启用某些权限,同时允许其他权限继续堆栈遍历时,这非常有用。
描述
添加一个 java.security.AccessController.doPrivileged
方法,该方法接受一个权限参数。
例如,一些引导 JRE 代码可以断言一个权限,通过 http 获取配置文件:
java
AccessController.doPrivileged(匿名类...,
new URLPermission(url,
请求属性...,
"GET")...
对于匹配的 URLPermission
的 checkPermission()
(由 http
处理程序完成)将在该 doPrivileged()
调用处停止遍历访问控制上下文(acc)堆栈并成功。然而,对于不匹配的 URLPermission
或其他权限的检查,将匹配 JRE 类通常分配的权限,并继续遍历完整的 acc 堆栈,就好像没有调用受限的 doPrivileged()
一样。
这些受限的权限也会被 getAccessControlContext()
和线程继承捕获。