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$
|
||||
* $Date$
|
||||
*
|
||||
|
@ -56,84 +56,11 @@ import org.apache.http.util.LangUtils;
|
|||
*/
|
||||
public class Cookie extends NameValuePair {
|
||||
|
||||
// ----------------------------------------------------------- Constructors
|
||||
|
||||
/**
|
||||
* Default constructor. Creates a blank cookie
|
||||
*/
|
||||
|
||||
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) {
|
||||
|
||||
public Cookie(final String name, final String 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(
|
||||
"Path of origin may not be null.");
|
||||
}
|
||||
this.host = host;
|
||||
this.host = host.toLowerCase();
|
||||
this.port = port;
|
||||
this.path = path;
|
||||
if (!path.trim().equals("")) {
|
||||
this.path = path;
|
||||
} else {
|
||||
this.path = "/";
|
||||
}
|
||||
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