public final class URLPermission extends Permission
URL
URL文字列は次のような構造を持つと想定されています。
scheme : // authority [ / path ]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の指定では前に「*.」を付けることができ、その場合この名前は、ホスト名のもっとも右側のドメイン・ラベルがこの名前と一致するようなすべてのホスト名に一致します。たとえば、「*.oracle.com」は「foo.bar.oracle.com」に一致します
portrangeは、このアクセス権が適用されるポート番号、あるいは有限または無限のポート範囲を指定するために使用されます。ポート範囲が指定されていないか無効である場合、スキームがhttp
(デフォルトは80)またはhttps
(デフォルトは443)であれば、デフォルトのポート番号が指定されていると見なされます。他のスキームの場合、想定されるデフォルトはありません。すべてのポートを意味するワイルドカードを指定することもできます。
userinfoはオプションです。ユーザー情報コンポーネントは、指定されていても、URLPermissionの作成時には無視され、このクラスで定義されている他のどのメソッドにも影響しません。
pathコンポーネントは、一連のパス・セグメントを「/」文字で区切ったものです。pathは空でもかまいません。パスの指定方法はFilePermission
のパスと同様です。次の例のように、異なる3つの方法があります。
URLの例 | 説明 |
---|---|
http://www.oracle.com/a/b/c.html | 特定の(単一の)リソースを識別するURL |
http://www.oracle.com/a/b/* | 「*」文字は、同じ「ディレクトリ」内のすべてのリソースを指します。つまり、パス・コンポーネントの数が同じで、「*」で表された最後のパス・コンポーネントだけが異なるような、すべてのリソースです。 |
http://www.oracle.com/a/b/- | 「-」文字は、その前のパスから再帰的に下るすべてのリソースを指します(この例ではhttp://www.oracle.com/a/b/c/d/e.htmlなどが一致します)。 |
「*」および「-」はパスの最後のセグメントにのみ指定でき、そのセグメントにはこの文字だけを指定する必要があります。URLのクエリー・コンポーネントとフラグメント・コンポーネントはURLPermissionの構築時には無視されます。
特殊な場合として、「scheme:*」という形式のURLを使用できます。これは、そのスキームのすべてのURLを意味します。
URL文字列のschemeおよびauthorityコンポーネントは、大文字と小文字を区別せずに扱われます。つまり、equals(Object)
、hashCode()
、およびimplies(Permission)
では、これらのコンポーネントに関して大文字と小文字は区別されません。authorityにリテラルIPアドレスが含まれている場合、そのアドレスは比較のために正規化されます。パス・コンポーネントでは大文字と小文字が区別されます。
アクション文字列
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などの特定のヘッダーを設定することを禁止します。適用されているセキュリティ・ポリシーがそれを許可しているかどうかは関係ありません。
コンストラクタと説明 |
---|
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オブジェクトに、指定されたアクセス権が含まれているかどうかを判定します。
|
checkGuard, getName, newPermissionCollection, toString
public URLPermission(String url, String actions)
url
- URL文字列actions
- アクション文字列IllegalArgumentException
- URLが無効であるか、actionsに空白が含まれている場合。public URLPermission(String url)
url
- URL文字列IllegalArgumentException
- URLが有効なURI
にならない場合public String getActions()
"method-names : header-names"
ここで、method-namesはメソッドをカンマで区切ったリスト、header-namesは許可されているヘッダーをカンマで区切ったリストです。返されるStringに空白はありません。header-namesが空の場合、区切り文字のコロンはありません。
getActions
、クラス: Permission
public boolean implies(Permission p)
パス照合の例を次に示します。
thisのパス | pのパス | 一致 |
---|---|---|
/a/b | /a/b | はい |
/a/b/* | /a/b/c | はい |
/a/b/* | /a/b/c/d | いいえ |
/a/b/- | /a/b/c/d | はい |
/a/b/- | /a/b/c/d/e | はい |
/a/b/- | /a/b/c/* | はい |
/a/b/* | /a/b/c/- | いいえ |
implies
、クラス: Permission
p
- チェック対象のアクセス権。public boolean equals(Object p)
equals
、クラス: Permission
p
- このオブジェクトと等しいかどうかが判定されるオブジェクト。Object.hashCode()
、HashMap
public int hashCode()
hashCode
、クラス: Permission
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.