- java.lang.Object
-
- java.security.Permission
-
- java.io.FilePermission
-
- すべての実装されたインタフェース:
Serializable,Guard
public final class FilePermission extends Permission implements Serializable
このクラスは、ファイルまたはディレクトリへのアクセスを表します。 FilePermissionは、パス名と、そのパス名に対して有効なアクションの集合からなります。パス名には、指定したアクションを許可するファイルまたはディレクトリのパス名を指定します。 「/*」(「/」はファイル区切り文字
File.separatorChar)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとディレクトリを表します。 「/-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリを(再帰的に)表します。 このようなパス名はワイルドカード・パス名と呼ばれます。 それ以外の場合は、単純なパス名です。パス名に特殊なトークン「<<ALL FILES>>」を指定した場合は、すべてのファイルに一致します。
ノート: 1つの「*」で構成されるパス名は、現在のディレクトリのすべてのファイルを示し、1つの「-」で構成されるパス名は、現在のディレクトリのすべてのファイル、および(再帰的に)現在のディレクトリに格納されているすべてのファイルおよびサブディレクトリを示します。
許可するアクションは、カンマで区切られた1個以上のキーワードのリストを内容とする文字列としてコンストラクタに引き渡されます。 指定できるキーワードは、「read」、「write」、「execute」、「delete」、および「readlink」です。 それぞれの意味は、次のように定義されます。
- read
- 読取り権限
- write
- 書込み権限
- execute
- 実行権。
Runtime.execの呼出しを許可します。SecurityManager.checkExecに対応します。 - delete
- 削除権限
File.deleteの呼出しを許可します。SecurityManager.checkDeleteに対応します。 - readlink
- リンク読取り権。
readSymbolicLinkメソッドを呼び出すことにより、シンボリック・リンクのターゲットを読み取ることができます。
アクション文字列は、処理の前に小文字に変換されます。
FilePermissionを許可する場合には注意してください。 さまざまなファイルやディレクトリへの読取りアクセス、特に書込みアクセスを許可するとどうなるかをよく検討してください。 writeアクションに対して「<<ALL FILES>>」を指定するのは特に危険です。 これは、ファイル・システム全体に対する書込みを許可するということです。 このような指定をすると、事実上、JVM実行環境を含め、システム・バイナリを置き換えることが可能になってしまいます。
ノート: コードは同一ディレクトリ(またはそのディレクトリのサブディレクトリ)内のファイルを常に読み取ることができるので、読取り時のアクセス権を明示する必要はありません。
- 導入されたバージョン:
- 1.2
- 関連項目:
Permission,Permissions,PermissionCollection
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 FilePermission(String path, String actions)指定されたアクションを持つ新しいFilePermissionオブジェクトを作成します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 booleanequals(Object obj)2つのFilePermissionオブジェクトが等しいかどうかを判定します。StringgetActions()アクションの「正規の文字列表現」を返します。inthashCode()このオブジェクトのハッシュ・コード値を返します。booleanimplies(Permission p)このFilePermissionオブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。PermissionCollectionnewPermissionCollection()FilePermissionオブジェクトを格納するための新しいPermissionCollectionオブジェクトを返します。-
クラスjava.securityで宣言されたメソッド。権限
checkGuard, getName, toString
-
-
-
-
コンストラクタの詳細
-
FilePermission
public FilePermission(String path, String actions)
指定されたアクションを持つ新しいFilePermissionオブジェクトを作成します。pathはファイルまたはディレクトリのパス名で、actionsはファイルまたはディレクトリで許可されるアクションのカンマで区切られたリストです。 指定できるアクションは、「read」、「write」、「execute」、「delete」、および「readlink」です。「/*」(「/」はファイル区切り文字
File.separatorChar)で終わるパス名は、そのディレクトリに含まれるすべてのファイルとディレクトリを表します。 「/-」で終わるパス名は、そのディレクトリに含まれるすべてのファイルとサブディレクトリを(再帰的に)表します。 特殊なパス名「<<ALL FILES>>」は、すべてのファイルに一致します。1つの「*」で構成されるパス名は、現在のディレクトリのすべてのファイルを示し、1つの「-」で構成されるパス名は、現在のディレクトリのすべてのファイル、および(再帰的に)現在のディレクトリに格納されているすべてのファイルおよびサブディレクトリを示します。
空の文字列を含むパス名は、空のパスを表します。
- 実装上のノート:
- この実装では、
jdk.io.permissionsUseCanonicalPathシステム・プロパティによって、path引数の処理方法と格納方法が決まります。システム・プロパティの値が
trueに設定されている場合、pathは正規化され、cpathという名前のStringオブジェクトとして格納されます。 これは、相対パスが絶対パスに変換され、Windows DOSスタイルの8.3パスが長いパスに拡張され、シンボリックリンクがそのターゲットに解決されることを意味します。システム・プロパティの値が
falseに設定されている場合、pathはnormalizationの後にnpathという名前のPathオブジェクトに変換されます。 正規化は実行されません。これは、基礎となるファイル・システムがアクセスされないことを意味します。 変換中にInvalidPathExceptionがスローされた場合、このFilePermissionには無効のラベルが付けられます。いずれの場合も、標準化または正規化の前に、ワイルドカード
pathの最後にある「*」または「- 」文字が削除されます。 これは、別のワイルドカード・フラグ・フィールドに格納されます。この実装では、
jdk.io.permissionsUseCanonicalPathシステム・プロパティのデフォルト値はfalseです。 - パラメータ:
path- ファイルまたはディレクトリのパス名。actions- アクション文字列。- 例外:
IllegalArgumentException- アクションがnullの場合、空の場合、または指定された有効なアクション以外のアクションを含む場合。
-
-
メソッドの詳細
-
implies
public boolean implies(Permission p)
このFilePermissionオブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。つまり、このメソッドは次の場合にtrueを返します。
- pがFilePermissionのインスタンスである。
- pのアクションは、このオブジェクトのアクションの適切なサブセットである
- pのパス名がこのオブジェクトのパス名に含まれている。 たとえば、「/tmp/*」は「/tmp/foo」を含んでいる。これは、「/tmp/*」には「foo」という名前のファイルも含めて「/tmp」ディレクトリ内のすべてのファイルが含まれているため。
正確に言えば、単純なパス名は、等しい場合にのみ、別の単純なパス名を意味します。 単純なパス名はワイルドカード・パス名を意味しません。 ワイルドカード・パス名は、後者によって暗黙的に示されるすべての単純なパス名が前者によって暗黙的に示される場合のみ、別のワイルドカード・パス名を示します。 ワイルドカード・パス名は、次の場合にのみ単純なパス名を示します。
- ワイルドカードフラグが"*"の場合、単純なパス名のパスはワイルドカードのパス名のパス内で正しくなければなりません。
- ワイルドカードフラグが「- 」の場合、単純なパス名のパスはワイルドカードのパス名のパス内で再帰的に指定する必要があります。
"<<ALL FILES>>"は、他のすべてのパス名を示します。 「<<ALL FILES>>」自体を除き、パス名は「<<ALL FILES>>」を意味します。
- 定義:
implies、クラスPermission- 実装上のノート:
jdk.io.permissionsUseCanonicalPathがtrueの場合、前の部分からベース名(パス名の名前シーケンスの姓)を削除した後で残りの部分が後者と等しい場合にのみ、ワイルドカードcpath内に単純なcpathが再帰的に含まれます(前者が後者から始まる場合のみ)。jdk.io.permissionsUseCanonicalPathがfalseの場合、simple_npath.relativize(wildcard_npath)が厳密に「..」である場合にのみ、単純なnpathがワイルドカードnpath内にあり、simple_npath.relativize(wildcard_npath)が1つ以上の「..」シリーズである場合にのみ、単純なnpathがワイルドカードnpath内で再帰的になります。 これは、"/-"は"/foo"を意味するが、"foo"を意味しない。無効な
FilePermissionは、それ自体以外のオブジェクトを意味しません。 無効なFilePermissionは、それ自体またはこの無効なFilePermissionのスーパーセットである「<<ALL FILES>>」のFilePermission以外のオブジェクトには示されません。 2つのFilePermissionが同じ無効なパスで作成されている場合でも、一方は他方を意味しません。- パラメータ:
p- チェック対象のアクセス権。- 戻り値:
- 指定されたアクセス権が
nullではなく、このオブジェクトに含まれている場合はtrue。それ以外の場合はfalse。
-
equals
public boolean equals(Object obj)
2つのFilePermissionオブジェクトが等しいかどうかを判定します。 objがFilePermissionであり、このオブジェクトと同じパス名とアクションを持っているかどうかを判定します。- 定義:
equals、クラスPermission- 実装上のノート:
- 具体的には、2つのパス名が同じワイルドカード・フラグを持ち、その
cpath(jdk.io.permissionsUseCanonicalPathがtrueの場合)またはnpath(jdk.io.permissionsUseCanonicalPathがfalseの場合)が等しい場合にのみ同じになります。 どちらも「<<ALL FILES>>」です。jdk.io.permissionsUseCanonicalPathがfalseの場合、無効なFilePermissionは、同じ無効なパスを使用して作成された場合でも、それ自体以外のオブジェクトと等しくありません。 - パラメータ:
obj- このオブジェクトと等しいかどうかが判定されるオブジェクト。- 戻り値:
- objがFilePermissionであり、このFilePermissionオブジェクトと同じパス名とアクションを持っている場合は
true。それ以外の場合はfalse。 - 関連項目:
Object.hashCode()、HashMap
-
hashCode
public int hashCode()
このオブジェクトのハッシュ・コード値を返します。- 定義:
hashCode、クラスPermission- 戻り値:
- このオブジェクトのハッシュ・コード値。
- 関連項目:
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
getActions
public String getActions()
アクションの「正規の文字列表現」を返します。 つまり、このメソッドは常にread、write、execute、delete、readlinkの順序で現在のアクションを返します。 たとえば、このFilePermissionオブジェクトがwriteとreadの両方のアクションを許可する場合、getActionsを呼び出すと、「read,write」という文字列が返されます。- 定義:
getActions、クラスPermission- 戻り値:
- アクションの正規の文字列表現。
-
newPermissionCollection
public PermissionCollection newPermissionCollection()
FilePermissionオブジェクトを格納するための新しいPermissionCollectionオブジェクトを返します。FilePermissionオブジェクトは、任意の順序でコレクションに挿入されるように、さらにPermissionCollectionの
impliesメソッドが効率的に(および安定して)実装されるように格納される必要があります。たとえば、次の2つのFilePermissionがあり、
-
"/tmp/-", "read" -
"/tmp/scratch/foo", "write"
そして次のFilePermissionで
impliesメソッドを呼び出す場合"/tmp/scratch/foo", "read,write",
implies関数は、「/tmp/-」および「/tmp/scratch/foo」の両方のアクセス権を考慮しなければならず、そのため、実質的なアクセス権は「read,write」であり、impliesはtrueを返します。 FilePermissionの「implies」セマンティックスは、このnewPermissionCollectionメソッドによって返されるPermissionCollectionオブジェクトによって正しく処理されます。- オーバーライド:
newPermissionCollection、クラスPermission- 戻り値:
- FilePermissionを格納するのに適切な新規PermissionCollectionオブジェクト。
-
-
-