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

クラスURLPermission

java.lang.Object
java.security.Permission
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
外部仕様
関連項目: