Initial refactoring of the CookieSpecBase and Cookie classes
git-svn-id: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpclient/trunk@406430 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b4a8206230
commit
9166e32b85
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v 1.44 2004/06/05 16:49:20 olegk Exp $
|
* $HeadURL$
|
||||||
* $Revision$
|
* $Revision$
|
||||||
* $Date$
|
* $Date$
|
||||||
*
|
*
|
||||||
|
@ -56,84 +56,11 @@ import org.apache.http.util.LangUtils;
|
||||||
*/
|
*/
|
||||||
public class Cookie extends NameValuePair {
|
public class Cookie extends NameValuePair {
|
||||||
|
|
||||||
// ----------------------------------------------------------- Constructors
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor. Creates a blank cookie
|
* Default constructor. Creates a blank cookie
|
||||||
*/
|
*/
|
||||||
|
public Cookie(final String name, final String value) {
|
||||||
public Cookie() {
|
|
||||||
this(null, "noname", null, null, null, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a cookie with the given name, value and domain attribute.
|
|
||||||
*
|
|
||||||
* @param name the cookie name
|
|
||||||
* @param value the cookie value
|
|
||||||
* @param domain the domain this cookie can be sent to
|
|
||||||
*/
|
|
||||||
public Cookie(String domain, String name, String value) {
|
|
||||||
this(domain, name, value, null, null, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a cookie with the given name, value, domain attribute,
|
|
||||||
* path attribute, expiration attribute, and secure attribute
|
|
||||||
*
|
|
||||||
* @param name the cookie name
|
|
||||||
* @param value the cookie value
|
|
||||||
* @param domain the domain this cookie can be sent to
|
|
||||||
* @param path the path prefix for which this cookie can be sent
|
|
||||||
* @param expires the {@link Date} at which this cookie expires,
|
|
||||||
* or <tt>null</tt> if the cookie expires at the end
|
|
||||||
* of the session
|
|
||||||
* @param secure if true this cookie can only be sent over secure
|
|
||||||
* connections
|
|
||||||
* @throws IllegalArgumentException If cookie name is null or blank,
|
|
||||||
* cookie name contains a blank, or cookie name starts with character $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public Cookie(String domain, String name, String value,
|
|
||||||
String path, Date expires, boolean secure) {
|
|
||||||
|
|
||||||
super(name, value);
|
super(name, value);
|
||||||
if (name == null) {
|
|
||||||
throw new IllegalArgumentException("Cookie name may not be null");
|
|
||||||
}
|
|
||||||
if (name.trim().equals("")) {
|
|
||||||
throw new IllegalArgumentException("Cookie name may not be blank");
|
|
||||||
}
|
|
||||||
this.setPath(path);
|
|
||||||
this.setDomain(domain);
|
|
||||||
this.setExpiryDate(expires);
|
|
||||||
this.setSecure(secure);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a cookie with the given name, value, domain attribute,
|
|
||||||
* path attribute, maximum age attribute, and secure attribute
|
|
||||||
*
|
|
||||||
* @param name the cookie name
|
|
||||||
* @param value the cookie value
|
|
||||||
* @param domain the domain this cookie can be sent to
|
|
||||||
* @param path the path prefix for which this cookie can be sent
|
|
||||||
* @param maxAge the number of seconds for which this cookie is valid.
|
|
||||||
* maxAge is expected to be a non-negative number.
|
|
||||||
* <tt>-1</tt> signifies that the cookie should never expire.
|
|
||||||
* @param secure if <tt>true</tt> this cookie can only be sent over secure
|
|
||||||
* connections
|
|
||||||
*/
|
|
||||||
public Cookie(String domain, String name, String value, String path,
|
|
||||||
int maxAge, boolean secure) {
|
|
||||||
|
|
||||||
this(domain, name, value, path, null, secure);
|
|
||||||
if (maxAge < -1) {
|
|
||||||
throw new IllegalArgumentException("Invalid max age: " + Integer.toString(maxAge));
|
|
||||||
}
|
|
||||||
if (maxAge >= 0) {
|
|
||||||
setExpiryDate(new Date(System.currentTimeMillis() + maxAge * 1000L));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -60,9 +60,13 @@ public final class CookieOrigin {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Path of origin may not be null.");
|
"Path of origin may not be null.");
|
||||||
}
|
}
|
||||||
this.host = host;
|
this.host = host.toLowerCase();
|
||||||
this.port = port;
|
this.port = port;
|
||||||
|
if (!path.trim().equals("")) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
|
} else {
|
||||||
|
this.path = "/";
|
||||||
|
}
|
||||||
this.secure = secure;
|
this.secure = secure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
* $HeadURL$
|
||||||
|
* $Revision$
|
||||||
|
* $Date$
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ====================================================================
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals on behalf of the Apache Software Foundation. For more
|
||||||
|
* information on the Apache Software Foundation, please see
|
||||||
|
* <http://www.apache.org/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.http.cookie.impl;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.apache.http.HeaderElement;
|
||||||
|
import org.apache.http.NameValuePair;
|
||||||
|
import org.apache.http.cookie.Cookie;
|
||||||
|
import org.apache.http.cookie.CookieAttributeHandler;
|
||||||
|
import org.apache.http.cookie.CookieOrigin;
|
||||||
|
import org.apache.http.cookie.MalformedCookieException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cookie management functions shared by all specification.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
|
||||||
|
*
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
public abstract class CookieSpecBase extends AbstractCookieSpec {
|
||||||
|
|
||||||
|
protected static String getDefaultPath(final CookieOrigin origin) {
|
||||||
|
String defaultPath = origin.getPath();
|
||||||
|
int lastSlashIndex = defaultPath.lastIndexOf('/');
|
||||||
|
if (lastSlashIndex >= 0) {
|
||||||
|
if (lastSlashIndex == 0) {
|
||||||
|
//Do not remove the very first slash
|
||||||
|
lastSlashIndex = 1;
|
||||||
|
}
|
||||||
|
defaultPath = defaultPath.substring(0, lastSlashIndex);
|
||||||
|
}
|
||||||
|
return defaultPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static String getDefaultDomain(final CookieOrigin origin) {
|
||||||
|
return origin.getHost();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Cookie[] parse(final HeaderElement[] elems, final CookieOrigin origin)
|
||||||
|
throws MalformedCookieException {
|
||||||
|
Cookie[] cookies = new Cookie[elems.length];
|
||||||
|
for (int i = 0; i < elems.length; i++) {
|
||||||
|
HeaderElement headerelement = elems[i];
|
||||||
|
|
||||||
|
String name = headerelement.getName();
|
||||||
|
String value = headerelement.getValue();
|
||||||
|
if (name == null || name.equals("")) {
|
||||||
|
throw new MalformedCookieException("Cookie name may not be empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
Cookie cookie = new Cookie(name, value);
|
||||||
|
cookie.setPath(getDefaultPath(origin));
|
||||||
|
cookie.setDomain(getDefaultDomain(origin));
|
||||||
|
|
||||||
|
// cycle through the parameters
|
||||||
|
NameValuePair[] attribs = headerelement.getParameters();
|
||||||
|
for (int j = attribs.length - 1; j >= 0; j--) {
|
||||||
|
NameValuePair attrib = attribs[j];
|
||||||
|
String s = attrib.getName().toLowerCase();
|
||||||
|
CookieAttributeHandler handler = findAttribHandler(s);
|
||||||
|
if (handler != null) {
|
||||||
|
handler.parse(cookie, attrib.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cookies[i] = cookie;
|
||||||
|
}
|
||||||
|
return cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validate(final Cookie cookie, final CookieOrigin origin)
|
||||||
|
throws MalformedCookieException {
|
||||||
|
if (cookie == null) {
|
||||||
|
throw new IllegalArgumentException("Cookie may not be null");
|
||||||
|
}
|
||||||
|
if (origin == null) {
|
||||||
|
throw new IllegalArgumentException("Cookie origin may not be null");
|
||||||
|
}
|
||||||
|
for (Iterator i = getAttribHandlerIterator(); i.hasNext();) {
|
||||||
|
CookieAttributeHandler handler = (CookieAttributeHandler) i.next();
|
||||||
|
handler.validate(cookie, origin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean match(final Cookie cookie, final CookieOrigin origin) {
|
||||||
|
if (cookie == null) {
|
||||||
|
throw new IllegalArgumentException("Cookie may not be null");
|
||||||
|
}
|
||||||
|
if (origin == null) {
|
||||||
|
throw new IllegalArgumentException("Cookie origin may not be null");
|
||||||
|
}
|
||||||
|
for (Iterator i = getAttribHandlerIterator(); i.hasNext();) {
|
||||||
|
CookieAttributeHandler handler = (CookieAttributeHandler) i.next();
|
||||||
|
if (!handler.match(cookie, origin)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue