org.apache.wicket.util.cookies.CookieUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.ops4j.pax.wicket.service Show documentation
Show all versions of org.ops4j.pax.wicket.service Show documentation
Pax Wicket Service is an OSGi extension of the Wicket framework, allowing for dynamic loading and
unloading of Wicket components and pageSources.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.wicket.util.cookies;
import javax.servlet.http.Cookie;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.util.time.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Helper class to simplify Cookie handling.
*
* @author Juergen Donnerstag
* @author Jonathan Locke
*/
public class CookieUtils
{
private final static Logger log = LoggerFactory.getLogger(CookieUtils.class);
private final CookieDefaults settings;
/**
* Construct.
*/
public CookieUtils()
{
settings = new CookieDefaults();
}
/**
* Construct.
*
* @param settings
*/
public CookieUtils(final CookieDefaults settings)
{
this.settings = settings;
}
/**
* @return Gets the settings for these utils
*/
public final CookieDefaults getSettings()
{
return settings;
}
/**
* Remove the cookie identified by the key
*
* @param key
*/
public final void remove(final String key)
{
final Cookie cookie = getCookie(key);
if (cookie != null)
{
remove(cookie);
}
}
/**
* Remove the cookie identified by the form component
*
* @param formComponent
*/
public final void remove(final FormComponent> formComponent)
{
remove(getKey(formComponent));
}
/**
* This method gets used when a cookie key needs to be derived from a form component. By default
* the component's page relative path is used.
*
* @param component
* @return cookie key
*/
protected String getKey(final FormComponent> component)
{
return component.getPageRelativePath();
}
/**
* Retrieve the cookie value by means of its key.
*
* @param key
* @return The cookie value associated with the key
*/
public final String load(final String key)
{
final Cookie cookie = getCookie(key);
if (cookie != null)
{
return cookie.getValue();
}
return null;
}
/**
* Retrieve the cookie value associated with the formComponent and load the model object with
* the cookie value.
*
* @param formComponent
* @return The Cookie value which has also been used to set the component's model value
*/
public final String load(final FormComponent> formComponent)
{
String value = load(getKey(formComponent));
if (value != null)
{
// Assign the retrieved/persisted value to the component
formComponent.setModelValue(splitValue(value));
}
return value;
}
/**
* Split the loaded Cookie value
*
* @param value
* @return The cookie's value split into fragments
*/
protected String[] splitValue(final String value)
{
return value.split(FormComponent.VALUE_SEPARATOR);
}
/**
* Join all fragments into one Cookie value
*
* @param values
* @return The cookie's value splitted into its constituent parts
*/
protected String joinValues(final String... values)
{
return Strings.join(FormComponent.VALUE_SEPARATOR, values);
}
/**
* Create a Cookie with key and value and save it in the browser with the next response
*
* @param key
* @param values
*/
public final void save(String key, final String... values)
{
key = getSaveKey(key);
String value = joinValues(values);
Cookie cookie = getCookie(key);
if (cookie == null)
{
cookie = new Cookie(key, value);
}
else
{
cookie.setValue(value);
}
cookie.setSecure(false);
cookie.setMaxAge(settings.getMaxAge());
save(cookie);
}
/**
* Save the form components model value in a cookie
*
* @param formComponent
*/
public final void save(final FormComponent> formComponent)
{
save(getKey(formComponent), formComponent.getValue());
}
/**
* Make sure the 'key' does not contain any illegal chars. E.g. for cookies ':' is not allowed.
*
* @param key
* The key to be validated
* @return The save key
*/
protected String getSaveKey(String key)
{
if (Strings.isEmpty(key))
{
throw new IllegalArgumentException("A Cookie name can not be null or empty");
}
// cookie names cannot contain ':',
// we replace ':' with '.' but first we have to encode '.' as '..'
key = key.replace(".", "..");
key = key.replace(":", ".");
return key;
}
/**
* Convenience method for deleting a cookie by name. Delete the cookie by setting its maximum
* age to zero.
*
* @param cookie
* The cookie to delete
*/
private void remove(final Cookie cookie)
{
if (cookie != null)
{
// Delete the cookie by setting its maximum age to zero
cookie.setMaxAge(0);
cookie.setValue(null);
save(cookie);
if (log.isDebugEnabled())
{
log.debug("Removed Cookie: " + cookie.getName());
}
}
}
/**
* Gets the cookie with 'name' attached to the latest WebRequest.
*
* @param name
* The name of the cookie to be looked up
*
* @return Any cookies for this request
*/
private Cookie getCookie(final String name)
{
String key = getSaveKey(name);
try
{
Cookie cookie = getWebRequest().getCookie(key);
if (log.isDebugEnabled())
{
if (cookie != null)
{
log.debug("Found Cookie with name=" + key + " and request URI=" +
getWebRequest().getUrl().toString());
}
else
{
log.debug("Unable to find Cookie with name=" + key + " and request URI=" +
getWebRequest().getUrl().toString());
}
}
return cookie;
}
catch (NullPointerException ex)
{
// Ignore any app server problem here
}
return null;
}
/**
* Persist/save the data using Cookies.
*
* @param cookie
* The Cookie to be persisted.
* @return The cookie provided
*/
private Cookie save(final Cookie cookie)
{
if (cookie == null)
{
return null;
}
initializeCookie(cookie);
getWebResponse().addCookie(cookie);
if (log.isDebugEnabled())
{
log.debug("Cookie saved: " + cookieToDebugString(cookie) + "; request URI=" +
getWebRequest().getUrl().toString());
}
return cookie;
}
/**
* Is called before the Cookie is saved. May be subclassed for different (dynamic) Cookie
* parameters. Static parameters can also be changed via {@link CookieDefaults}.
*
* @param cookie
*/
protected void initializeCookie(final Cookie cookie)
{
final String comment = settings.getComment();
if (comment != null)
{
cookie.setComment(comment);
}
final String domain = settings.getDomain();
if (domain != null)
{
cookie.setDomain(domain);
}
ServletWebRequest request = (ServletWebRequest)getWebRequest();
String path = request.getContainerRequest().getContextPath() + "/" +
request.getFilterPrefix();
cookie.setPath(path);
cookie.setVersion(settings.getVersion());
cookie.setSecure(settings.getSecure());
}
/**
* Convenience method to get the http request.
*
* @return WebRequest related to the RequestCycle
*/
private WebRequest getWebRequest()
{
return (WebRequest)RequestCycle.get().getRequest();
}
/**
* Convenience method to get the http response.
*
* @return WebResponse related to the RequestCycle
*/
private WebResponse getWebResponse()
{
return (WebResponse)RequestCycle.get().getResponse();
}
/**
* Gets debug info as a string for the given cookie.
*
* @param cookie
* the cookie to debug.
* @return a string that represents the internals of the cookie.
*/
private String cookieToDebugString(final Cookie cookie)
{
return "[Cookie " + " name = " + cookie.getName() + ", value = " + cookie.getValue() +
", domain = " + cookie.getDomain() + ", path = " + cookie.getPath() + ", maxAge = " +
Time.millis(cookie.getMaxAge()).toDateString() + "(" + cookie.getMaxAge() + ")" + "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy