/** * This file Copyright (c) 2008-2010 Magnolia International * Ltd. (http://www.magnolia-cms.com). All rights reserved. * * * This file is dual-licensed under both the Magnolia * Network Agreement and the GNU General Public License. * You may elect to use one or the other of these licenses. * * This file is distributed in the hope that it will be * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT. * Redistribution, except as permitted by whichever of the GPL * or MNA you select, is prohibited. * * 1. For the GPL license (GPL), you can redistribute and/or * modify this file under the terms of the GNU General * Public License, Version 3, as published by the Free Software * Foundation. You should have received a copy of the GNU * General Public License, Version 3 along with this program; * if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * 2. For the Magnolia Network Agreement (MNA), this file * and the accompanying materials are made available under the * terms of the MNA which accompanies this distribution, and * is available at http://www.magnolia-cms.com/mna.html * * Any modifications to this file must keep this entire header * intact. * */ package info.magnolia.module.cache.cachepolicy; import info.magnolia.cms.core.AggregationState; import info.magnolia.context.MgnlContext; import info.magnolia.module.cache.SSLAwareCacheKey; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * A cache policy which will also respect the SSL status for cache keys. This * allows the proper caching of redirect messages. * @author will */ public class SSLAware extends Default { @Override public Object retrieveCacheKey(final AggregationState aggregationState) { // get original URI - not using current URI since we want to cache original URIs, not those we forward to (parameters in virtual URIs, i18n, ...) final String uri = aggregationState.getOriginalURI(); // get serverName and request params and from WebContext final HttpServletRequest request = MgnlContext.getWebContext().getRequest(); final String serverName; final boolean isSecure; final Map params; if (MgnlContext.isWebContext()) { isSecure = request.isSecure(); serverName = request.getServerName(); params = MgnlContext.getWebContext().getParameters(); } else { isSecure = false; serverName = null; params = null; } // get locale final String localeStr; final Locale locale = aggregationState.getLocale(); if(locale != null){ localeStr = locale.toString(); } else { localeStr = null; } // create composite key so we can easily check each part of it later return new SSLAwareCacheKey(uri, serverName, localeStr, params, isSecure); // return new DefaultCacheKey(uri, serverName, localeStr, params); } }