|  | @@ -1,475 +0,0 @@
 | 
	
		
			
				|  |  | -/* Copyright 2004, 2005 Acegi Technology Pty Limited
 | 
	
		
			
				|  |  | - *
 | 
	
		
			
				|  |  | - * 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.
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -package org.acegisecurity.wrapper;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import java.security.Principal;
 | 
	
		
			
				|  |  | -import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | -import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Enumeration;
 | 
	
		
			
				|  |  | -import java.util.Iterator;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Locale;
 | 
	
		
			
				|  |  | -import java.util.Map;
 | 
	
		
			
				|  |  | -import java.util.TimeZone;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import javax.servlet.http.Cookie;
 | 
	
		
			
				|  |  | -import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | -import javax.servlet.http.HttpServletRequestWrapper;
 | 
	
		
			
				|  |  | -import javax.servlet.http.HttpSession;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import org.acegisecurity.Authentication;
 | 
	
		
			
				|  |  | -import org.acegisecurity.AuthenticationTrustResolver;
 | 
	
		
			
				|  |  | -import org.acegisecurity.AuthenticationTrustResolverImpl;
 | 
	
		
			
				|  |  | -import org.acegisecurity.GrantedAuthority;
 | 
	
		
			
				|  |  | -import org.acegisecurity.context.SecurityContextHolder;
 | 
	
		
			
				|  |  | -import org.acegisecurity.intercept.web.SandboxSecurityEnforcementFilter;
 | 
	
		
			
				|  |  | -import org.acegisecurity.userdetails.UserDetails;
 | 
	
		
			
				|  |  | -import org.acegisecurity.wrapper.redirect.Enumerator;
 | 
	
		
			
				|  |  | -import org.acegisecurity.wrapper.redirect.FastHttpDateFormat;
 | 
	
		
			
				|  |  | -import org.acegisecurity.wrapper.redirect.SavedHttpServletRequest;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * An Acegi Security-aware <code>HttpServletRequestWrapper</code>, which uses
 | 
	
		
			
				|  |  | - * the <code>SecurityContext</code>-defined <code>Authentication</code>
 | 
	
		
			
				|  |  | - * object for
 | 
	
		
			
				|  |  | - * {@link SecurityContextHolderAwareRequestWrapper#isUserInRole(java.lang.String)}
 | 
	
		
			
				|  |  | - * and {@link javax.servlet.http.HttpServletRequestWrapper#getRemoteUser()}
 | 
	
		
			
				|  |  | - * responses.
 | 
	
		
			
				|  |  | - * <p>
 | 
	
		
			
				|  |  | - * Provides request parameters, headers, cookies from original requrest or saved request.
 | 
	
		
			
				|  |  | - * </p>
 | 
	
		
			
				|  |  | - * 
 | 
	
		
			
				|  |  | - * @author Orlando Garcia Carmona
 | 
	
		
			
				|  |  | - * @author Ben Alex
 | 
	
		
			
				|  |  | - * @author Andrey Grebnev <a href="mailto:andrey.grebnev@blandware.com"><andrey.grebnev@blandware.com></a>
 | 
	
		
			
				|  |  | - * @version $Id$
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -public class SandboxSecurityContextHolderAwareRequestWrapper extends
 | 
	
		
			
				|  |  | -		HttpServletRequestWrapper {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// ~ Static fields ========================================================
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	protected static final TimeZone GMT_ZONE = TimeZone.getTimeZone("GMT");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default Locale if none are specified.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	protected static Locale defaultLocale = Locale.getDefault();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// ~ Instance fields
 | 
	
		
			
				|  |  | -	// ========================================================
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Authentication trust resolver.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private AuthenticationTrustResolver authenticationTrustResolver = new AuthenticationTrustResolverImpl();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The set of SimpleDateFormat formats to use in getDateHeader().
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * Notice that because SimpleDateFormat is not thread-safe, we can't declare
 | 
	
		
			
				|  |  | -	 * formats[] as a static variable.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	protected SimpleDateFormat formats[] = new SimpleDateFormat[3];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Saved request (to be resumed after authentication)
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	protected SavedHttpServletRequest savedRequest = null;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// ~ Constructors
 | 
	
		
			
				|  |  | -	// ===========================================================
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The class' primary constructor.
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @param request HttpServletRequest
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public SandboxSecurityContextHolderAwareRequestWrapper(HttpServletRequest request) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// First do what the parent class needs to.
 | 
	
		
			
				|  |  | -		super(request);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// Return if there isn't an existing HttpSession
 | 
	
		
			
				|  |  | -		HttpSession session = request.getSession(false);
 | 
	
		
			
				|  |  | -		if (session != null) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// We know there's an existing HttpSession, so see if it has a
 | 
	
		
			
				|  |  | -			// saved request (placed there by SecurityEnforcementFilter).
 | 
	
		
			
				|  |  | -			SavedHttpServletRequest saved = (SavedHttpServletRequest) session
 | 
	
		
			
				|  |  | -					.getAttribute(SandboxSecurityEnforcementFilter.SAVED_REQUEST_SESSION_ATTRIBUTE);
 | 
	
		
			
				|  |  | -			if (saved != null) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				// We know there's a saved request, so see if it has a
 | 
	
		
			
				|  |  | -				// saved "root" request URI to forward to.
 | 
	
		
			
				|  |  | -				String requestURI = saved.getRequestURI();
 | 
	
		
			
				|  |  | -				if (requestURI != null) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -					// We know there's a saved "root" request URI, so see if
 | 
	
		
			
				|  |  | -					// it's the
 | 
	
		
			
				|  |  | -					// same one specified by this request.
 | 
	
		
			
				|  |  | -					if (requestURI.equals(request.getRequestURI())) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						// They're the same "root" request URIs, so get the
 | 
	
		
			
				|  |  | -						// saved request and remove it from the HttpSession
 | 
	
		
			
				|  |  | -						// since we only want to process it once.
 | 
	
		
			
				|  |  | -						savedRequest = saved;
 | 
	
		
			
				|  |  | -						session
 | 
	
		
			
				|  |  | -								.removeAttribute(SandboxSecurityEnforcementFilter.SAVED_REQUEST_SESSION_ATTRIBUTE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						formats[0] = new SimpleDateFormat(
 | 
	
		
			
				|  |  | -								"EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
 | 
	
		
			
				|  |  | -						formats[1] = new SimpleDateFormat(
 | 
	
		
			
				|  |  | -								"EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US);
 | 
	
		
			
				|  |  | -						formats[2] = new SimpleDateFormat(
 | 
	
		
			
				|  |  | -								"EEE MMMM d HH:mm:ss yyyy", Locale.US);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						formats[0].setTimeZone(GMT_ZONE);
 | 
	
		
			
				|  |  | -						formats[1].setTimeZone(GMT_ZONE);
 | 
	
		
			
				|  |  | -						formats[2].setTimeZone(GMT_ZONE);
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	// ~ Methods
 | 
	
		
			
				|  |  | -	// ================================================================
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Returns the principal's name, as obtained from the
 | 
	
		
			
				|  |  | -	 * <code>SecurityContextHolder</code>. Properly handles both
 | 
	
		
			
				|  |  | -	 * <code>String</code>-based and <code>UserDetails</code>-based
 | 
	
		
			
				|  |  | -	 * principals.
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @return the username or <code>null</code> if unavailable
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public String getRemoteUser() {
 | 
	
		
			
				|  |  | -		Authentication auth = getAuthentication();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ((auth == null) || (auth.getPrincipal() == null)) {
 | 
	
		
			
				|  |  | -			return null;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if (auth.getPrincipal() instanceof UserDetails) {
 | 
	
		
			
				|  |  | -			return ((UserDetails) auth.getPrincipal()).getUsername();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return auth.getPrincipal().toString();
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Simple searches for an exactly matching {@link
 | 
	
		
			
				|  |  | -	 * GrantedAuthority#getAuthority()}.
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * <p>
 | 
	
		
			
				|  |  | -	 * Will always return <code>false</code> if the
 | 
	
		
			
				|  |  | -	 * <code>SecurityContextHolder</code> contains an
 | 
	
		
			
				|  |  | -	 * <code>Authentication</code> with
 | 
	
		
			
				|  |  | -	 * <code>null</code><code>principal</code> and/or
 | 
	
		
			
				|  |  | -	 * <code>GrantedAuthority[]</code> objects.
 | 
	
		
			
				|  |  | -	 * </p>
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @param role the <code>GrantedAuthority</code><code>String</code> representation to check for.
 | 
	
		
			
				|  |  | -	 * @return <code>true</code> if an <b>exact</b> (case sensitive) matching granted authority is located, <code>false</code> otherwise.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public boolean isUserInRole(String role) {
 | 
	
		
			
				|  |  | -		return isGranted(role);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Returns the <code>Authentication</code> (which is a subclass of
 | 
	
		
			
				|  |  | -	 * <code>Principal</code>), or <code>null</code> if unavailable.
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * <p>
 | 
	
		
			
				|  |  | -	 * Note: Override this method in order to workaround the problem in Sun Java
 | 
	
		
			
				|  |  | -	 * System Application Server 8.1 PE
 | 
	
		
			
				|  |  | -	 * </p>
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @return the <code>Authentication</code>, or <code>null</code>
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Principal getUserPrincipal() {
 | 
	
		
			
				|  |  | -		Authentication auth = getAuthentication();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ((auth == null) || (auth.getPrincipal() == null)) {
 | 
	
		
			
				|  |  | -			return null;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return auth;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Obtain the current active <code>Authentication</code>
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @return the authentication object or <code>null</code>
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private Authentication getAuthentication() {
 | 
	
		
			
				|  |  | -		Authentication auth = SecurityContextHolder.getContext()
 | 
	
		
			
				|  |  | -				.getAuthentication();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if (!authenticationTrustResolver.isAnonymous(auth)) {
 | 
	
		
			
				|  |  | -			return auth;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return null;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Determines if principal has been granted a given role.
 | 
	
		
			
				|  |  | -	 * 
 | 
	
		
			
				|  |  | -	 * @param role The role being tested.
 | 
	
		
			
				|  |  | -	 * @return True if principal has been granted the given role.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	private boolean isGranted(String role) {
 | 
	
		
			
				|  |  | -		Authentication auth = getAuthentication();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if ((auth == null) || (auth.getPrincipal() == null)
 | 
	
		
			
				|  |  | -				|| (auth.getAuthorities() == null)) {
 | 
	
		
			
				|  |  | -			return false;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		for (int i = 0; i < auth.getAuthorities().length; i++) {
 | 
	
		
			
				|  |  | -			if (role.equals(auth.getAuthorities()[i].getAuthority())) {
 | 
	
		
			
				|  |  | -				return true;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return false;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getMethod() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public String getMethod() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getMethod();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return savedRequest.getMethod();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getHeader(String name)
 | 
	
		
			
				|  |  | -	 * on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public String getHeader(String name) {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getHeader(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			String header = null;
 | 
	
		
			
				|  |  | -			Iterator iterator = savedRequest.getHeaderValues(name);
 | 
	
		
			
				|  |  | -			while (iterator.hasNext()) {
 | 
	
		
			
				|  |  | -				header = (String) iterator.next();
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			return header;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getIntHeader(String
 | 
	
		
			
				|  |  | -	 * name) on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public int getIntHeader(String name) {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getIntHeader(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			String value = getHeader(name);
 | 
	
		
			
				|  |  | -			if (value == null) {
 | 
	
		
			
				|  |  | -				return (-1);
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				return (Integer.parseInt(value));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getDateHeader(String
 | 
	
		
			
				|  |  | -	 * name) on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public long getDateHeader(String name) {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getDateHeader(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			String value = getHeader(name);
 | 
	
		
			
				|  |  | -			if (value == null)
 | 
	
		
			
				|  |  | -				return (-1L);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			// Attempt to convert the date header in a variety of formats
 | 
	
		
			
				|  |  | -			long result = FastHttpDateFormat.parseDate(value, formats);
 | 
	
		
			
				|  |  | -			if (result != (-1L)) {
 | 
	
		
			
				|  |  | -				return result;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			throw new IllegalArgumentException(value);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getHeaderNames() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Enumeration getHeaderNames() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getHeaderNames();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return new Enumerator(savedRequest.getHeaderNames());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getHeaders(String name)
 | 
	
		
			
				|  |  | -	 * on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Enumeration getHeaders(String name) {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getHeaders(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return new Enumerator(savedRequest.getHeaderValues(name));
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getCookies() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Cookie[] getCookies() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getCookies();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			List cookies = savedRequest.getCookies();
 | 
	
		
			
				|  |  | -			return (Cookie[]) cookies.toArray(new Cookie[cookies.size()]);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return
 | 
	
		
			
				|  |  | -	 * getParameterValues(String name) on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public String[] getParameterValues(String name) {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getParameterValues(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return savedRequest.getParameterValues(name);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getParameterNames() on
 | 
	
		
			
				|  |  | -	 * the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Enumeration getParameterNames() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getParameterNames();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return new Enumerator(savedRequest.getParameterNames());
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getParameterMap() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Map getParameterMap() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getParameterMap();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			return savedRequest.getParameterMap();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getParameter(String
 | 
	
		
			
				|  |  | -	 * name) on the wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public String getParameter(String name) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/*
 | 
	
		
			
				|  |  | -		 * if (savedRequest == null) { return super.getParameter(name); } else {
 | 
	
		
			
				|  |  | -		 * String value = null; String[] values =
 | 
	
		
			
				|  |  | -		 * savedRequest.getParameterValues(name); if (values == null) return
 | 
	
		
			
				|  |  | -		 * null; for (int i = 0; i < values.length; i++) { value = values[i];
 | 
	
		
			
				|  |  | -		 * break; } return value; }
 | 
	
		
			
				|  |  | -		 */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// We do not get value from super.getParameter because
 | 
	
		
			
				|  |  | -		// of a bug in Jetty servlet-container.
 | 
	
		
			
				|  |  | -		String value = null;
 | 
	
		
			
				|  |  | -		String[] values = null;
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			values = super.getParameterValues(name);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			values = savedRequest.getParameterValues(name);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if (values == null)
 | 
	
		
			
				|  |  | -			return null;
 | 
	
		
			
				|  |  | -		for (int i = 0; i < values.length; i++) {
 | 
	
		
			
				|  |  | -			value = values[i];
 | 
	
		
			
				|  |  | -			break;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return value;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getLocales() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Enumeration getLocales() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getLocales();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			Iterator iterator = savedRequest.getLocales();
 | 
	
		
			
				|  |  | -			if (iterator.hasNext()) {
 | 
	
		
			
				|  |  | -				return new Enumerator(iterator);
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				ArrayList results = new ArrayList();
 | 
	
		
			
				|  |  | -				results.add(defaultLocale);
 | 
	
		
			
				|  |  | -				return new Enumerator(results.iterator());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * The default behavior of this method is to return getLocale() on the
 | 
	
		
			
				|  |  | -	 * wrapped request object.
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	public Locale getLocale() {
 | 
	
		
			
				|  |  | -		if (savedRequest == null) {
 | 
	
		
			
				|  |  | -			return super.getLocale();
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			Locale locale = null;
 | 
	
		
			
				|  |  | -			Iterator iterator = savedRequest.getLocales();
 | 
	
		
			
				|  |  | -			while (iterator.hasNext()) {
 | 
	
		
			
				|  |  | -				locale = (Locale) iterator.next();
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if (locale == null) {
 | 
	
		
			
				|  |  | -				return defaultLocale;
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				return locale;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -}
 |