权限

注意:Permissions 需要使用 Java SecurityManager。Java 版本 17 已弃用 SecurityManager 并计划在未来版本中移除。Java 18 及更高版本默认情况下不允许在运行时设置 SecurityManager。因此,在 Java 18 或更高版本中使用 Permissions 将不再受支持。在这些 Java 运行时版本中使用它将抛出 org.apache.tools.ant.BuildException。可以通过将 ant.securitymanager.usage.warn 系统或 Ant 属性设置为 true 来放宽抛出 BuildException,这将导致记录警告而不是抛出异常。即使将 ant.securitymanager.usage.warn 设置为 true,SecurityManager 的使用仍将被禁用,并且不会执行任何安全检查。建议不再使用 <permissions>

Permissions 表示授予或撤销给在运行 Apache Ant 的 JVM 中执行的特定代码部分的一组安全权限。实际的权限通过一组嵌套的权限项(<grant><revoke>)来指定。

在基本情况下,授予了一组 基本权限。可以授予额外的权限。授予的权限可以通过撤销权限来覆盖。如果受这些权限约束的代码尝试使用未授予或已被撤销的权限,则由权限安装的安全管理器将抛出 SecurityException

嵌套元素

grant

表示始终授予特定权限。它的属性指示授予哪些权限。

属性 描述 必需
class 权限类的完全限定名。
name 权限的名称。实际内容取决于权限类。
actions 允许的操作。实际内容取决于权限类和名称。

隐式权限被授予。

请注意,某些权限类可能实际上需要名称和/或操作才能正常工作。名称和操作由实际的权限类解析。

revoke

表示撤销特定权限。

属性 描述 必需
class 权限类的完全限定名。
name 权限的名称。实际内容取决于权限类。
actions 允许的操作。实际内容取决于权限类和名称。

隐式权限不会被解析,因此也不会被撤销。

name 可以处理名称末尾的 * 通配符,在这种情况下,所有名称以指定名称(不包括 *)开头的指定类的权限都被撤销。请注意,授予属性通常支持的 - 通配符不受支持。如果 name 保持为空,则所有名称都匹配,并且被撤销。如果 actions 保持为空,则所有操作都匹配,并且被撤销。

基本集

权限集隐式包含以下权限

<grant class="java.net.SocketPermission" name="localhost:1024-" actions="listen">
<grant class="java.util.PropertyPermission" name="java.version" actions="read">
<grant class="java.util.PropertyPermission" name="java.vendor" actions="read">
<grant class="java.util.PropertyPermission" name="java.vendor.url" actions="read">
<grant class="java.util.PropertyPermission" name="java.class.version" actions="read">
<grant class="java.util.PropertyPermission" name="os.name" actions="read">
<grant class="java.util.PropertyPermission" name="os.version" actions="read">
<grant class="java.util.PropertyPermission" name="os.arch" actions="read">
<grant class="java.util.PropertyPermission" name="file.encoding" actions="read">
<grant class="java.util.PropertyPermission" name="file.separator" actions="read">
<grant class="java.util.PropertyPermission" name="path.separator" actions="read">
<grant class="java.util.PropertyPermission" name="line.separator" actions="read">
<grant class="java.util.PropertyPermission" name="java.specification.version" actions="read">
<grant class="java.util.PropertyPermission" name="java.specification.vendor" actions="read">
<grant class="java.util.PropertyPermission" name="java.specification.name" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.specification.version" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.specification.vendor" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.specification.name" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.version" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.vendor" actions="read">
<grant class="java.util.PropertyPermission" name="java.vm.name" actions="read">

如果需要,可以通过 <revoke> 元素撤销这些权限。

示例

<permissions>
  <grant class="java.security.AllPermission"/>
  <revoke class="java.util.PropertyPermission"/>
</permissions>

授予代码所有权限,除了处理属性的权限。

<permissions>
  <grant class="java.net.SocketPermission" name="foo.bar.com" action="connect"/>
  <grant class="java.util.PropertyPermission" name="user.home" action="read,write"/>
</permissions>

授予基本权限集,并添加 SocketPermission 以连接到 foo.bar.com 以及读取和写入 user.home 系统属性的权限。