モジュール java.base
パッケージ java.net

クラスURLPermission

  • すべての実装されたインタフェース:
    Serializable, Guard

    public final class URLPermission
    extends Permission
    ある特定のURLで定義され、ある特定のユーザー設定可能なリクエスト・メソッドおよびリクエスト・ヘッダーのセットで使われるリソースまたはリソース・セットへのアクセス権を表します。 アクセス権の名前はURL文字列です。 アクション文字列は、要求メソッドと要求ヘッダーを連結したものです。 メソッド名とヘッダー名の範囲はこのクラスでは制限されません。

    URL

    URL文字列は次のような構造を持つと想定されています。

         scheme : // authority [ / path ] [ ignored-query-or-fragment ]
     
    schemeは通常はhttpまたはhttpsですが、このクラスでは制限されません。authorityは次のように指定されます。
         authority = [ userinfo @ ] hostrange [ : portrange ]
         portrange = portnumber | -portnumber | portnumber-[portnumber] | *
         hostrange = ([*.] dnsname) | IPv4address | IPv6address
     
    dnsnameは、標準のDNSホストまたはドメイン名です。つまり、"."で区切られた1つ以上のラベルです。 IPv4addressは標準のリテラルIPv4アドレスで、IPv6addressRFC 2732で定義されているとおりです。 ただし、リテラルIPv6アドレスは[]文字で囲む必要があります。 dnsnameの指定は、*.を先頭に付けることができ、これは名前が、右端のドメイン・ラベルがこの名前と同じすべてのホスト名に一致することを意味します。 たとえば、"*.example.com"での検索"foo.bar.example.com"

    portrangeは、このアクセス権が適用されるポート番号、あるいは有限または無限のポート範囲を指定するために使用されます。 ポート範囲が指定されていないか無効である場合、スキームがhttp (デフォルトは80)またはhttps (デフォルトは443)であれば、デフォルトのポート番号が指定されていると見なされます。 他のスキームの場合、想定されるデフォルトはありません。 すべてのポートを意味するワイルドカードを指定することもできます。

    userinfoはオプションです。 ユーザー情報コンポーネントは、指定されていても、URLPermissionの作成時には無視され、このクラスで定義されている他のどのメソッドにも影響しません。

    pathコンポーネントは/文字によって区切られたパス・セグメントのシーケンスから構成されます。pathは空にすることもできます。 パスはFilePermissionのパスと同じように指定します。 次の例に示すように、3つの異なる方法があります。

    URLの例
    URLの例説明
    http://www.example.com/a/b/c.html 特定の(単一の)リソースを識別するURL
    http://www.example.com/a/b/* 「*」文字は、同じ「ディレクトリ」内のすべてのリソースを指します。つまり、パス・コンポーネントの数が同じで、「*」で表された最後のパス・コンポーネントだけが異なるような、すべてのリソースです。
    http://www.example.com/a/b/- '-'文字は、先行するパス(例:http://www.example.com/a/b/c/d/e.htmlはこの例に一致)の下に再帰的に存在するすべてのリソースを指します。

    「*」および「-」はパスの最後のセグメントにのみ指定でき、そのセグメントにはこの文字だけを指定する必要があります。 URLのクエリー・コンポーネントとフラグメント・コンポーネントはURLPermissionの構築時には無視されます。

    特殊な場合として、「scheme:*」という形式のURLを使用できます。これは、そのスキームのすべてのURLを意味します。

    URL文字列のschemeおよびauthorityコンポーネントは大文字と小文字に関係なく処理されます。 このことは、equals(Object)hashCode()およびimplies(Permission)は、これらのコンポーネントに関して大文字と小文字が区別されることを意味します。 authorityにリテラルIPアドレスが含まれる場合、このアドレスは比較のため正規化されます。 パス・コンポーネントは大文字と小文字が区別されます。

    ignored-query-or-fragmentは、パス・コンポーネントのあとに出現するすべての問合せまたはフラグメントを表し、このクラスのコンストラクタで無視されます。 次のように定義されます。

         ignored-query-or-fragment = [ ? query ] [ # fragment ]
     
    ここで、queryfragmentRFC2396で定義されているものです。getName()は、権限が作成されたurl文字列のschemeauthorityおよびpathコンポーネントのみを返します。

    アクション文字列

    URLPermissionのアクション文字列は、メソッド・リスト要求ヘッダー・リストを連結したものです。 これらはそれぞれ、そのアクセス権で許可される要求メソッドおよび許可される要求ヘッダーのリストです。 2つのリストはコロン「:」文字で区切られ、各リストの要素はカンマで区切られます。 次にいくつかの例を示します。

    • "POST,GET,DELETE"
    • "GET:X-Foo-Request,X-Bar-Request"
    • "POST,GET:Header1,Header2"

    最初の例は、メソッドPOST、GETおよびDELETEを指定していますが、要求ヘッダーは指定していません。 2番目の例は、1つの要求メソッドと2つのヘッダーを指定しています。 3番目の例は、2つの要求メソッドと2つのヘッダーを指定しています。

    要求ヘッダー・リストが空の場合、区切り文字のコロンは必要ありません。 アクション文字列に空白は使用できません。 URLPermissionのコンストラクタに指定されたアクション文字列は、大文字と小文字を区別せずに正規化されます。この正規化では、メソッド名は大文字に変換され、ヘッダー名はRFC2616で定義されている形式(各語の最初の文字は大文字、他は小文字)に変換されます。 どちらか一方のリストにワイルドカード「*」文字を含めることができ、それぞれ、すべての要求メソッドまたはすべての要求ヘッダーを意味します。

    注: 使用するコンテキストによっては、要求メソッドとヘッダーの一部が常に許可される場合や常に拒否される場合もあります。 たとえば、HTTPプロトコル・ハンドラは、アプリケーション・コードがContent-Lengthなどの特定のヘッダーを設定することを禁止します。適用されているセキュリティ・ポリシーがそれを許可しているかどうかは関係ありません。

    導入されたバージョン:
    1.8
    関連項目:
    直列化された形式
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      URLPermission​(String url)
      次のように2つの引数コンストラクタを呼び出すことで、指定されたURL文字列と無制限のメソッドおよびリクエスト・ヘッダーでURLPermissionを作成します: URLPermission(url, "*:*")
      URLPermission​(String url, String actions)
      URL文字列から、指定されたリクエスト・メソッドおよびユーザー設定可能なリクエスト・ヘッダーを許可する新しいURLPermissionを作成します。
    • メソッドのサマリー

      修飾子と型 メソッド 説明
      boolean equals​(Object p)
      this.getActions().equals(p.getActions())で、pのURLがこれのURLと等しい場合は、trueを返します。
      String getActions()
      正規化されたメソッド・リストとリクエスト・ヘッダー・リストを次の形式で返します。
      int hashCode()
      アクション文字列とURL文字列のハッシュ・コードから計算されたハッシュ・コードを返します。
      boolean implies​(Permission p)
      このURLPermissionオブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。
    • コンストラクタの詳細

      • URLPermission

        public URLPermission​(String url,
                             String actions)
        URL文字列から、指定されたリクエスト・メソッドおよびユーザー設定可能なリクエスト・ヘッダーを許可する新しいURLPermissionを作成します。 アクセス権の名前は、その作成に使用されたURL文字列です。 内部で使用されるのは、URLのスキーム、機関およびパス・コンポーネントだけです。 クエリー・コンポーネントとフラグメント・コンポーネントはすべて無視されます。 アクセス権のアクション文字列は前述のとおりです。
        パラメータ:
        url - URL文字列
        actions - アクション文字列
        例外:
        IllegalArgumentException - URLが無効であるか、actionsに空白が含まれている場合。
      • URLPermission

        public URLPermission​(String url)
        次のように2つの引数コンストラクタを呼び出すことで、指定されたURL文字列と無制限のメソッドおよびリクエスト・ヘッダーでURLPermissionを作成します: URLPermission(url, "*:*")
        パラメータ:
        url - URL文字列
        例外:
        IllegalArgumentException - URLが有効なURIにならない場合
    • メソッドの詳細

      • getActions

        public String getActions()
        正規化されたメソッド・リストとリクエスト・ヘッダー・リストを次の形式で返します。
              "method-names : header-names"
         

        ここで、method-namesはメソッドをカンマで区切ったリスト、header-namesは許可されているヘッダーをカンマで区切ったリストです。 返されるStringに空白はありません。 header-namesが空の場合、コロン区切り文字は存在しない可能性があります。

        定義:
        getActions 、クラス:  Permission
        戻り値:
        このPermissionのアクション。
      • implies

        public boolean implies​(Permission p)
        このURLPermissionオブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。 具体的には、次に示すチェックが次のような順序で行われます。
        • pがURLPermissionのインスタンスでない場合は、falseを返します
        • pのメソッドのいずれかがthisのメソッド・リストに含まれていない場合で、thisのメソッド・リストが「*」と等しくないときは、falseを返します。
        • pのヘッダーのいずれかがthisの要求ヘッダー・リストに含まれていない場合で、thisの要求ヘッダー・リストが「*」と等しくないときは、falseを返します。
        • thisのURLのスキームがpのURLのスキームと等しくない場合は、falseを返します
        • thisのURLのスキーム固有部分が「*」である場合は、trueを返します
        • pのURLのホスト範囲によって定義されるホスト・セットが、thisのURLのホスト範囲のサブセットでない場合は、falseを返します。 たとえば、"*.foo.example.com"は"*.example.com"のサブセットです。"foo.bar.example.com"は"*.foo.example.com"のサブセットではありません
        • pのURLによって定義されるポート範囲が、thisのURLによって定義されるポート範囲のサブセットでない場合は、falseを返します。
        • pのURLによって指定される1つまたは複数のパスが、thisのURLによって指定されるパス・セットに含まれている場合は、trueを返します
        • それ以外の場合はfalseを返します。

        パス照合の例を次に示します。

        パス照合の例
        thisのパスpのパス一致
        /a/b/a/bはい
        /a/b/*/a/b/cはい
        /a/b/c/dいいえ
        /a/b/c/-いいえ
        /a/b/-/a/b/c/dはい
        /a/b/c/d/eはい
        /a/b/c/*はい

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

        public boolean equals​(Object p)
        this.getActions().equals(p.getActions())で、pのURLがこれのURLと等しい場合は、trueを返します。 それ以外の場合はfalseを返します。
        定義:
        equals 、クラス:  Permission
        パラメータ:
        p - このオブジェクトと等しいかどうかが判定されるオブジェクト。
        戻り値:
        2つのPermissionオブジェクトが等しい場合はtrue
        関連項目:
        Object.hashCode()HashMap