モジュール java.base
パッケージ 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

        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に設定されている場合、pathnormalizationの後に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.permissionsUseCanonicalPathtrueの場合、単純なcpathはワイルドカードcpathの中にあります。これは、前者のベース名(パス名の名前順の最後の名前)を後者に置き換えた場合にのみ、単純なcpathはワイルドカードcpathの中に再帰的に入ります後者と。

        jdk.io.permissionsUseCanonicalPathfalseである場合、単純なnpathはワイルドカードnpath内にあり、 simple_npath.relativize(wildcard_npath)が厳密に".."である場合にのみ、単純なnpathはワイルドカードnpathの中に再帰的に存在し、simple_npath.relativize(wildcard_npath)が一連の1つ以上の".."です。 つまり、"/-"は"/foo"を意味しますが、"foo"は意味しません。

        無効なFilePermissionは、それ以外のオブジェクトを意味しません。 無効なFilePermissionは、それ以外のオブジェクトによって暗示されていないか、"<<ALL FILES>>"のFilePermissionは無効なFilePermissionのスーパーセットです。 たとえ2つのFilePermissionが同じ無効なパスで作成されたとしても、もう一方を暗示するものではありません。

        パラメータ:
        p - チェック対象のアクセス権。
        戻り値:
        指定されたアクセス権がnullではなく、このオブジェクトに含まれている場合はtrue。それ以外の場合はfalse
      • equals

        public boolean equals​(Object obj)
        2つのFilePermissionオブジェクトが等しいかどうかを判定します。 objがFilePermissionであり、このオブジェクトと同じパス名とアクションを持っているかどうかを判定します。
        定義:
        equals 、クラス:  Permission
        実装上の注意:
        より具体的には、2つのパス名が同じワイルドカード・フラグを持ち、それらのcpathが(jdk.io.permissionsUseCanonicalPathtrueの場合)またはnpath (jdk.io.permissionsUseCanonicalPathfalseの場合)が等しい場合に限り、2つのパス名が同じです。 または、両方とも"<<ALL FILES>>"です。

        jdk.io.permissionsUseCanonicalPathfalseの場合、無効なFilePermissionは、同じ無効なパスを使用して作成されていても、それ以外のオブジェクトと等しくありません。

        パラメータ:
        obj - このオブジェクトと等しいかどうかが判定されるオブジェクト。
        戻り値:
        objがFilePermissionであり、このFilePermissionオブジェクトと同じパス名とアクションを持っている場合はtrue。それ以外の場合はfalse
        関連項目:
        Object.hashCode()HashMap
      • 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があり、

        1. "/tmp/-", "read"
        2. "/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オブジェクト。