public class CookieManager extends CookieHandler
CookieHandler
,其从策略围绕接受和拒绝饼干饼干分开的存储。
那么CookieManager初始化为CookieStore
,其管理存储和CookiePolicy
对象,这使得上的cookie接受/拒绝决策。
java.net包中的HTTP Cookie管理如下所示:
use CookieHandler <------- HttpURLConnection ^ | impl | use CookieManager -------> CookiePolicy | use |--------> HttpCookie | ^ | | use | use | |--------> CookieStore ^ | impl | Internal in-memory implementation
- CookieHandler is at the core of cookie management. User can call CookieHandler.setDefault to set a concrete CookieHanlder implementation to be used.
- CookiePolicy.shouldAccept will be called by CookieManager.put to see whether or not one cookie should be accepted and put into cookie store. User can use any of three pre-defined CookiePolicy, namely ACCEPT_ALL, ACCEPT_NONE and ACCEPT_ORIGINAL_SERVER, or user can define his own CookiePolicy implementation and tell CookieManager to use it.
- CookieStore is the place where any accepted HTTP cookie is stored in. If not specified when created, a CookieManager instance will use an internal in-memory implementation. Or user can implements one and tell CookieManager to use it.
- Currently, only CookieStore.add(URI, HttpCookie) and CookieStore.get(URI) are used by CookieManager. Others are for completeness and might be needed by a more sophisticated CookieStore implementation, e.g. a NetscapeCookieSotre.
用户可以通过各种方式连接自己的HTTP cookie管理行为,例如
- Use CookieHandler.setDefault to set a brand new
CookieHandler
implementation- Let CookieManager be the default
CookieHandler
implementation, but implement user's ownCookieStore
andCookiePolicy
and tell default CookieManager to use them:// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));- Let CookieManager be the default
CookieHandler
implementation, but use customizedCookiePolicy
:// 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
Constructor and Description |
---|
CookieManager()
创建一个新的cookie管理器。
|
CookieManager(CookieStore store, CookiePolicy cookiePolicy)
使用指定的Cookie存储和Cookie策略创建一个新的cookie管理器。
|
Modifier and Type | Method and Description |
---|---|
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)
设置所有适用的Cookie,示例是响应头字段,名为Set-Cookie2,存在于响应头中的cookie缓存中。
|
void |
setCookiePolicy(CookiePolicy cookiePolicy)
设置此Cookie管理器的Cookie策略。
|
getDefault, setDefault
public CookieManager()
此构造函数将创建具有默认Cookie存储并接受策略的新Cookie管理器。 效果与CookieManager(null, null)
相同。
public CookieManager(CookieStore store, CookiePolicy cookiePolicy)
store
- 一个CookieStore
由cookie管理器使用。
如果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是否通过http,https发送或在其他上下文中使用,如javascript。 在javascript的情况下,主机部分应反映cookie的目的地或其原点。
考虑到URI
和cookies属性和安全设置来确定应该返回哪些属性。
HTTP协议实现者应确保在添加与选择cookie相关的所有请求头之后,以及发送请求之前调用此方法。
get
在
CookieHandler
uri
-
URI
Cookie的预期用途的
URI
requestHeaders
- 从请求头字段名称映射到表示当前请求头的字段值的列表
IOException
- 如果发生I / O错误
CookieHandler.put(URI, Map)
public void put(URI uri, Map<String,List<String>> responseHeaders) throws IOException
CookieHandler
put
在
CookieHandler
uri
- 一个
URI
的饼干来自
responseHeaders
- 从字段名称到表示返回的响应标头字段的字段值列表的不可变映射
IOException
- 如果发生I / O错误
CookieHandler.get(URI, Map)