public class CookieManager extends CookieHandler
CookieHandler
,
which separates the storage of cookies from the policy surrounding accepting
and rejecting cookies. A CookieManager is initialized with a CookieStore
which manages storage, and a CookiePolicy
object, which makes
policy decisions on cookie acceptance/rejection.
The HTTP cookie management in java.net package looks like:
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.
There're various ways user can hook up his own HTTP cookie management behavior, e.g.
- 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());
The implementation conforms to RFC 2965, section 3.3.
CookiePolicy
Constructor and Description |
---|
CookieManager()
Create a new cookie manager.
|
CookieManager(CookieStore store,
CookiePolicy cookiePolicy)
Create a new cookie manager with specified cookie store and cookie policy.
|
Modifier and Type | Method and Description |
---|---|
Map<String,List<String>> |
get(URI uri,
Map<String,List<String>> requestHeaders)
Gets all the applicable cookies from a cookie cache for the
specified uri in the request header.
|
CookieStore |
getCookieStore()
To retrieve current cookie store.
|
void |
put(URI uri,
Map<String,List<String>> responseHeaders)
Sets all the applicable cookies, examples are response header
fields that are named Set-Cookie2, present in the response
headers into a cookie cache.
|
void |
setCookiePolicy(CookiePolicy cookiePolicy)
To set the cookie policy of this cookie manager.
|
getDefault, setDefault
public CookieManager()
This constructor will create new cookie manager with default
cookie store and accept policy. The effect is same as
CookieManager(null, null)
.
public CookieManager(CookieStore store, CookiePolicy cookiePolicy)
store
- a CookieStore
to be used by cookie manager.
if null
, cookie manager will use a default one,
which is an in-memory CookieStore implementation.cookiePolicy
- a CookiePolicy
instance
to be used by cookie manager as policy callback.
if null
, ACCEPT_ORIGINAL_SERVER will
be used.public void setCookiePolicy(CookiePolicy cookiePolicy)
A instance of CookieManager
will have
cookie policy ACCEPT_ORIGINAL_SERVER by default. Users always
can call this method to set another cookie policy.
cookiePolicy
- the cookie policy. Can be null
, which
has no effects on current cookie policy.public CookieStore getCookieStore()
public Map<String,List<String>> get(URI uri, Map<String,List<String>> requestHeaders) throws IOException
CookieHandler
The URI
passed as an argument specifies the intended use for
the cookies. In particular the scheme should reflect whether the cookies
will be sent over http, https or used in another context like javascript.
The host part should reflect either the destination of the cookies or
their origin in the case of javascript.
It is up to the implementation to take into account the URI
and
the cookies attributes and security settings to determine which ones
should be returned.
HTTP protocol implementers should make sure that this method is called after all request headers related to choosing cookies are added, and before the request is sent.
get
in class CookieHandler
uri
- a URI
representing the intended use for the
cookiesrequestHeaders
- - a Map from request header
field names to lists of field values representing
the current request headersIOException
- if an I/O error occursCookieHandler.put(URI, Map)
public void put(URI uri, Map<String,List<String>> responseHeaders) throws IOException
CookieHandler
put
in class CookieHandler
uri
- a URI
where the cookies come fromresponseHeaders
- an immutable map from field names to
lists of field values representing the response
header fields returnedIOException
- if an I/O error occursCookieHandler.get(URI, Map)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2022, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.