クラス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は、このアクセス権が適用されているポート番号、またはバインドされているかバインドされていないポートの範囲を指定するために使用します。 ポート範囲が存在しないか、無効の場合、schemeがhttp (デフォルトは80)またはhttps (デフォルトは443)であれば、デフォルトのポート番号が想定されます。 他のschemeの場合デフォルトは想定されません。 すべてのポートを意味するワイルドカードを指定できます。

userinfoはオプションです。 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の問合せまたはフラグメント・コンポーネントは、URLPermissionsの構築時に無視されます。

特殊なケースとして、形式「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
外部仕様
関連項目:
  • コンストラクタのサマリー

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

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

    クラスjava.security.Permissionで宣言されたメソッド

    checkGuard, getName, newPermissionCollection, toString

    クラスjava.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • 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に空白はありません。 ヘッダー名が空の場合、コロン区切り文字は存在しない可能性があります。

      定義:
      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のパスmatch
      /a/b/a/byes
      /a/b/*/a/b/cyes
      /a/b/c/dno
      /a/b/c/-no
      /a/b/-/a/b/c/dyes
      /a/b/c/d/eyes
      /a/b/c/*yes

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

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

      public int hashCode()
      アクション文字列とURL文字列のハッシュ・コードから計算されたハッシュ・コードを返します。
      定義:
      hashCode、クラスPermission
      戻り値:
      このオブジェクトのハッシュ・コード値。
      関連項目: