- すべての実装されたインタフェース:
Serializable
,Guard
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 | IPv6addressdnsnameは、標準のDNSホストまたはドメイン名です。つまり、"."で区切られた1つ以上のラベルです。 IPv4addressは標準のリテラルIPv4アドレスで、IPv6addressはRFC 2732で定義されているとおりです。 ただし、リテラルIPv6アドレスは「[]」文字で囲む必要があります。 dnsnameの指定は、「*.」を先頭に付けることができ、これは名前が、右端のドメイン・ラベルがこの名前と同じすべてのホスト名に一致することを意味します。 たとえば、"*.example.com"での検索"foo.bar.example.com"
portrangeは、このアクセス権が適用されるポート番号、あるいは有限または無限のポート範囲を指定するために使用されます。 ポート範囲が指定されていないか無効である場合、スキームがhttp
(デフォルトは80)またはhttps
(デフォルトは443)であれば、デフォルトのポート番号が指定されていると見なされます。 他のスキームの場合、想定されるデフォルトはありません。 すべてのポートを意味するワイルドカードを指定することもできます。
userinfoはオプションです。 ユーザー情報コンポーネントは、指定されていても、URLPermissionの作成時には無視され、このクラスで定義されている他のどのメソッドにも影響しません。
pathコンポーネントは「/」文字によって区切られたパス・セグメントのシーケンスから構成されます。pathは空にすることもできます。 パスはFilePermission
のパスと同じように指定します。 次の例に示すように、3つの異なる方法があります。
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 ]ここで、queryとfragmentはRFC2396で定義されているものです。
getName()
は、権限が作成されたurl文字列のscheme、authorityおよび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
this.getActions().equals(p.getActions())で、pのURLがこれのURLと等しい場合は、trueを返します。正規化されたメソッド・リストとリクエスト・ヘッダー・リストを次の形式で返します。int
hashCode()
アクション文字列とURL文字列のハッシュ・コードから計算されたハッシュ・コードを返します。boolean
implies(Permission p)
このURLPermissionオブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。クラス java.security.Permissionで宣言されたメソッド
checkGuard, getName, newPermissionCollection, toString
-
コンストラクタの詳細
-
URLPermission
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
-
hashCode
public int hashCode()アクション文字列とURL文字列のハッシュ・コードから計算されたハッシュ・コードを返します。- 定義:
hashCode
、クラス:Permission
- 戻り値:
- このオブジェクトのハッシュ・コード値
- 関連項目:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-