注意: 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 中執行的特定部分程式碼。實際的 Permissions 是透過一組巢狀權限項目指定,這些項目可以是 <grant>
ed 或 <revoke>
d。
在基本情況下,會授予 基本組 的權限。可以授予額外的權限。已授予的權限可以透過撤銷權限來推翻。如果受這些權限約束的程式碼嘗試使用尚未授予或已撤銷的權限,則由權限安裝的安全管理員會擲回 SecurityException
。
表示總是授予特定權限。其屬性表示授予哪些權限。
屬性 | 說明 | 必要 |
---|---|---|
class | Permission 類別的完整限定名稱。 | 是 |
name | Permission 的名稱。實際內容取決於 Permission 類別。 | 否 |
actions | 允許的動作。實際內容取決於 Permission 類別和名稱。 | 否 |
授予隱含權限。
請注意,某些 Permission 類別實際上可能需要名稱和/或動作才能正常運作。名稱和動作是由實際的 Permission 類別解析的。
表示撤銷特定權限。
屬性 | 說明 | 必要 |
---|---|---|
class | Permission 類別的完整限定名稱。 | 是 |
name | Permission 的名稱。實際內容取決於 Permission 類別。 | 否 |
actions | 允許的動作。實際內容取決於 Permission 類別和名稱。 | 否 |
隱含權限不會解析,因此也不會撤銷。
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
系統屬性的權限。