diff -r fd16c54261b3 -r 90ce3da70b43 jdk/src/share/classes/java/net/CookieManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/net/CookieManager.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,335 @@ +/* + * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package java.net; + +import java.util.Map; +import java.util.List; +import java.util.Collections; +import java.util.Comparator; +import java.io.IOException; + +/** + * CookieManager provides a concrete implementation of {@link CookieHandler}, + * which separates the storage of cookies from the policy surrounding accepting + * and rejecting cookies. A CookieManager is initialized with a {@link CookieStore} + * which manages storage, and a {@link 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 {@link CookieHandler} implementation + *
- Let CookieManager be the default {@link CookieHandler} implementation, + * but implement user's own {@link CookieStore} and {@link CookiePolicy} + * 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 {@link CookieHandler} implementation, but + * use customized {@link 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()); + *
The implementation conforms to RFC 2965, section 3.3. + * + * @author Edward Wang + * @since 1.6 + */ +public class CookieManager extends CookieHandler +{ + /* ---------------- Fields -------------- */ + + private CookiePolicy policyCallback; + + + private CookieStore cookieJar = null; + + + /* ---------------- Ctors -------------- */ + + /** + * Create a new cookie manager. + * + *
This constructor will create new cookie manager with default + * cookie store and accept policy. The effect is same as + * CookieManager(null, null). + */ + public CookieManager() { + this(null, null); + } + + + /** + * Create a new cookie manager with specified cookie store and cookie policy. + * + * @param store a CookieStore to be used by cookie manager. + * if null, cookie manager will use a default one, + * which is an in-memory CookieStore implmentation. + * @param cookiePolicy a CookiePolicy instance + * to be used by cookie manager as policy callback. + * if null, ACCEPT_ORIGINAL_SERVER will + * be used. + */ + public CookieManager(CookieStore store, + CookiePolicy cookiePolicy) + { + // use default cookie policy if not specify one + policyCallback = (cookiePolicy == null) ? CookiePolicy.ACCEPT_ORIGINAL_SERVER + : cookiePolicy; + + // if not specify CookieStore to use, use default one + if (store == null) { + cookieJar = new sun.net.www.protocol.http.InMemoryCookieStore(); + } else { + cookieJar = store; + } + } + + + /* ---------------- Public operations -------------- */ + + /** + * To set the cookie policy of this cookie manager. + * + *
A instance of CookieManager will have
+ * cookie policy ACCEPT_ORIGINAL_SERVER by default. Users always
+ * can call this method to set another cookie policy.
+ *
+ * @param cookiePolicy the cookie policy. Can be null, which
+ * has no effects on current cookie policy.
+ */
+ public void setCookiePolicy(CookiePolicy cookiePolicy) {
+ if (cookiePolicy != null) policyCallback = cookiePolicy;
+ }
+
+
+ /**
+ * To retrieve current cookie store.
+ *
+ * @return the cookie store currently used by cookie manager.
+ */
+ public CookieStore getCookieStore() {
+ return cookieJar;
+ }
+
+
+ public Map