public class CookieManager extends CookieHandler
CookieHandler
の具象実装を提供し、CookieのストレージとCookieの受け入れ/拒否に関するポリシーとを分離します。CookieManagerは、ストレージを管理するCookieStore
と、Cookieの受け入れ/拒否に関するポリシー決定を行うCookiePolicy
オブジェクトとを使って初期化されます。
java.netパッケージにおけるHTTP Cookie管理は、次のようになっています。
use CookieHandler <------- HttpURLConnection ^ | impl | use CookieManager -------> CookiePolicy | use |--------> HttpCookie | ^ | | use | use | |--------> CookieStore ^ | impl | Internal in-memory implementation
- CookieHandlerがCookie管理の中核となる。ユーザーはCookieHandler.setDefaultを呼び出すことで、使用すべきCookieHanlderの具象実装を設定できる。
- CookiePolicy.shouldAcceptがCookieManager.putによって呼び出され、あるCookieを受け入れてCookieストア内に格納すべきかどうかが確認される。ユーザーは、3つの定義済みCookiePolicy、つまりACCEPT_ALL、ACCEPT_NONE、ACCEPT_ORIGINAL_SERVER、のいずれかを使用することもできるし、ユーザー独自のCookiePolicy実装を定義し、CookieManagerにそれを使用するよう指示することもできる。
- CookieStoreは、受け入れられたすべてのHTTP Cookieの格納場所となる。作成時に指定されなかった場合、CookieManagerインスタンスは内部のインメモリー実装を使用する。また、ユーザーが別のものを実装し、CookieManagerにそれを使用するよう指示することもできる。
- 現時点では、CookieManagerによって使用されているのは、CookieStore.add(URI, HttpCookie)とCookieStore.get(URI)だけである。それ以外は完全を期すためのものであるが、NetscapeCookieStoreなど、より高度なCookieStore実装では必要になる可能性がある。
ユーザーが独自のHTTP Cookie管理動作を組み込む方法としては、さまざまなものが考えられます。次に例を示します。
- CookieHandler.setDefaultを使って新しい
CookieHandler
実装を設定する。- CookieManagerをデフォルトの
CookieHandler
実装にするが、ユーザー独自のCookieStore
とCookiePolicy
を実装し、デフォルトのCookieManagerにそれらを使用するよう指示する。// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));- CookieManagerをデフォルトの
CookieHandler
実装にするが、カスタマイズされたCookiePolicy
を使用する。// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager()); // this can be done at any point of an HTTP session ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy());
この実装は、RFC 2965のセクション3.3に準拠しています。
CookiePolicy
コンストラクタと説明 |
---|
CookieManager()
新しいCookieマネージャを作成します。
|
CookieManager(CookieStore store, CookiePolicy cookiePolicy)
指定されたCookieストアとCookieポリシーを使って新しいCookieマネージャを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
Map<String,List<String>> |
get(URI uri, Map<String,List<String>> requestHeaders)
要求ヘッダー内に指定されたURIのCookieキャッシュから適用可能なすべてのCookieを取得します。
|
CookieStore |
getCookieStore()
現在のCookieストアを取得するためのもの。
|
void |
put(URI uri, Map<String,List<String>> responseHeaders)
応答ヘッダー内に存在するSet-Cookie2という名前の応答ヘッダー・フィールドなど、適用可能なすべてのCookieをCookieキャッシュ内に設定します。
|
void |
setCookiePolicy(CookiePolicy cookiePolicy)
このCookieマネージャのCookieポリシーを設定するためのもの。
|
getDefault, setDefault
public CookieManager()
このコンストラクタは、デフォルトのCookieストアと受け入れポリシーを使って新しいCookieマネージャを作成します。その効果はCookieManager(null, null)
と同じです。
public CookieManager(CookieStore store, CookiePolicy cookiePolicy)
store
- Cookieマネージャが使用すべきCookieStore
。null
の場合、CookieマネージャはデフォルトのインメモリーCookieStore実装を使用します。cookiePolicy
- Cookieマネージャがポリシー・コールバックとして使用すべきCookiePolicy
インスタンス。null
の場合、ACCEPT_ORIGINAL_SERVERが使用されます。public void setCookiePolicy(CookiePolicy cookiePolicy)
CookieManager
のインスタンスはデフォルトで、CookieポリシーACCEPT_ORIGINAL_SERVERを持ちます。ユーザーはいつでもこのメソッドを呼び出して別のCookieポリシーを設定できます。
cookiePolicy
- Cookieポリシー。null
も可能ですが、現在のCookieポリシーに対する効果はありません。public CookieStore getCookieStore()
public Map<String,List<String>> get(URI uri, Map<String,List<String>> requestHeaders) throws IOException
CookieHandler
引数として渡されるURI
は、Cookieの使用目的を指定します。たとえば、スキームにはCookieがhttpまたはhttpsのどちらで送信されるのかや、Javascriptなどの別のコンテキストで使用されるのかを反映するべきです。ホスト部分にはCookieの転送先またはJavascriptの場合はそれらのオリジンを反映するべきです。
どれを返すかを決定する際に、URI
およびCookieの属性とセキュリティ設定を考慮することは、実装に任されています。
HTTPプロトコルの実装者は、Cookieの選択に関係するすべての要求ヘッダーが追加されてから要求が送信されるまでの間に、必ずこのメソッドが呼び出されるようにしてください。
get
、クラス: CookieHandler
uri
- Cookieの使用目的を表すURI
requestHeaders
- 現在の要求ヘッダーを表す、要求ヘッダー・フィールド名からフィールド値のリストへのマップIOException
- 入出力エラーが発生した場合CookieHandler.put(URI, Map)
public void put(URI uri, Map<String,List<String>> responseHeaders) throws IOException
CookieHandler
put
、クラス: CookieHandler
uri
- Cookieの生成元のURI
responseHeaders
- 返された応答ヘッダー・フィールドを表す、フィールド名からフィールド値のリストへの不変のマップIOException
- 入出力エラーが発生した場合CookieHandler.get(URI, Map)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.