パーミッション

注意: パーミッションには、Java SecurityManager の使用が必要です。Java バージョン 17 では、SecurityManager が廃止されて削除が検討されており、Java 18 以降のバージョンでは、デフォルトで実行時の SecurityManager 設定が禁止されています。そのため、パーミッションは Java 18 以降のバージョンではサポートされなくなりました。これらの Java ランタイムバージョンで使用すると、org.apache.tools.ant.BuildExceptionがスローされます。BuildException のスローを緩和するには、ant.securitymanager.usage.warn システムまたは Ant プロパティを true に設定します。そうすると、例外がスローされる代わりに警告がログに記録されます。ant.securitymanager.usage.warntrue に設定されていても、SecurityManager の使用は引き続き無効になっており、セキュリティチェックは実行されません。<permissions> の使用を中止することをお勧めします。

パーミッションは、Apache Ant が実行されている JVM で実行される特定の部分のコードに対して許可または取り消される、セキュリティパーミッションのセットを表します。実際のパーミッションは、ネストされたパーミッションアイテムセット(<grant> または <revoke>)で指定されます。

基本的な状況では、基本セットのパーミッションが付与されています。追加のパーミッションを付与できます。付与されたパーミッションは、パーミッションを取り消すことで上書きできます。これらのパーミッションの対象となるコードが、付与されていないパーミッションまたは取り消されたパーミッションを使用しようとすると、パーミッションによってインストールされたセキュリティマネージャーは SecurityException をスローします。

ネストされた要素

付与

特定のパーミッションが常に付与されることを示します。属性は、付与されるパーミッションを示します。

属性 説明 必須
クラス パーミッションクラスの完全修飾名。 はい
名前 パーミッションの名前。実際の内容はパーミッションクラスによって異なります。 いいえ
アクション 許可されるアクション。実際の内容はパーミッションクラスと名前に依存します。 いいえ

暗黙のパーミッションは付与されます。

一部のパーミッションクラスは、適切に機能するために名前やアクションを実際に必要とする場合がありますのでご注意ください。名前とアクションは、実際のパーミッションクラスによって解析されます。

取り消し

特定のパーミッションを取り消すことを示します。

属性 説明 必須
クラス パーミッションクラスの完全修飾名。 はい
名前 パーミッションの名前。実際の内容はパーミッションクラスによって異なります。 いいえ
アクション 許可されるアクション。実際の内容はパーミッションクラスと名前に依存します。 いいえ

暗黙的なパーミッションは解決されず、したがって取り消されません。

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>

基本セットのパーミッションに、foo.bar.com に接続するための SocketPermission と、user.home システムプロパティの読み取りと書き込みのパーミッションを追加します。