Skip to content

JEP 140: Limited doPrivileged | 有限的 doPrivileged

摘要

允许代码断言其权限的一个子集,同时不阻止完整的访问控制堆栈遍历以检查其他权限。

动机

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

描述

添加一个 java.security.AccessController.doPrivileged 方法,该方法接受一个权限参数。

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

java
AccessController.doPrivileged(匿名类...,
                              new URLPermission(url,
                                                请求属性...,
                                                "GET")...

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

这些受限的权限也会被 getAccessControlContext() 和线程继承捕获。