You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Igor Vaynberg <ig...@gmail.com> on 2010/09/11 16:02:09 UTC

Re: svn commit: r996128 - in /wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource: AbstractResource.java PackageResource.java

probably better to have cache control be an enum rather then boolean.

-igor

On Sat, Sep 11, 2010 at 4:58 AM,  <pe...@apache.org> wrote:
> Author: pete
> Date: Sat Sep 11 11:58:49 2010
> New Revision: 996128
>
> URL: http://svn.apache.org/viewvc?rev=996128&view=rev
> Log:
> give user control over [Cache-Control: public] or [Cache-Control:private] to maximize caching or protect confidential or user-specific data from public caching
>
> Modified:
>    wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
>    wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/PackageResource.java
>
> Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
> URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java?rev=996128&r1=996127&r2=996128&view=diff
> ==============================================================================
> --- wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java (original)
> +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java Sat Sep 11 11:58:49 2010
> @@ -78,6 +78,7 @@ public abstract class AbstractResource i
>                private Date lastModified = null;
>                private WriteCallback writeCallback;
>                private int cacheDuration;
> +               private boolean cachePublic;
>
>                /**
>                 * Construct.
> @@ -85,6 +86,11 @@ public abstract class AbstractResource i
>                public ResourceResponse()
>                {
>                        cacheDuration = Application.get().getResourceSettings().getDefaultCacheDuration();
> +
> +                       // set caching on public caches to false. this behavior is similar to wicket 1.4
> +                       // setting it to [true] seems to be sexy but could potentially cache confidential
> +                       // data on public proxies for users migrating to 1.5
> +                       cachePublic = false;
>                }
>
>                /**
> @@ -293,7 +299,7 @@ public abstract class AbstractResource i
>                /**
>                 * Sets the duration for which this resource should be cached on client (in seconds). #see
>                 * {@link IResourceSettings#setDefaultCacheDuration(int)}
> -                *
> +                *
>                 * @param cacheDuration
>                 *            caching duration in seconds
>                 */
> @@ -311,6 +317,37 @@ public abstract class AbstractResource i
>                }
>
>                /**
> +                * returns if the resource may be cached by public caches or not
> +                * <p/>
> +                * resources are only cached at all if the cache duration for the response is > 0.
> +                *
> +                * @return <code>true</code> if public caches are allowed to cache the resource
> +                *
> +                * @see org.apache.wicket.request.resource.AbstractResource.ResourceResponse#getCacheDuration()
> +                * @see org.apache.wicket.protocol.http.RequestUtils#enableCaching(org.apache.wicket.request.http.WebResponse, int, boolean)
> +                */
> +               public boolean isCachePublic()
> +               {
> +                       return cachePublic;
> +               }
> +
> +               /**
> +                * controls if the resource may be cached by public caches
> +                * <p/>
> +                * resources are only cached at all if the cache duration for the response is > 0.
> +                *
> +                * @param cachePublic
> +                *             if <code>true</code> public caches are allowed to cache the resource
> +                *
> +                * @see org.apache.wicket.request.resource.AbstractResource.ResourceResponse#getCacheDuration()
> +                * @see org.apache.wicket.protocol.http.RequestUtils#enableCaching(org.apache.wicket.request.http.WebResponse, int, boolean)
> +                */
> +               public void setCachePublic(boolean cachePublic)
> +               {
> +                       this.cachePublic = cachePublic;
> +               }
> +
> +               /**
>                 * Sets the {@link WriteCallback}. The callback is responsible for generating the response
>                 * data.
>                 * <p>
> @@ -355,7 +392,7 @@ public abstract class AbstractResource i
>
>                if(duration > 0)
>                {
> -                       RequestUtils.enableCaching(response, duration, false);
> +                       RequestUtils.enableCaching(response, duration, data.isCachePublic());
>                }
>                else
>                {
>
> Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/PackageResource.java
> URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/PackageResource.java?rev=996128&r1=996127&r2=996128&view=diff
> ==============================================================================
> --- wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/PackageResource.java (original)
> +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/PackageResource.java Sat Sep 11 11:58:49 2010
> @@ -207,6 +207,14 @@ public class PackageResource extends Abs
>                                return sendResourceError(resourceResponse, 500, "Unable to open resource stream");
>                        }
>                }
> +
> +               // if timestamps are enabled on resource we can maximize caching with no pain
> +               if(Application.get().getResourceSettings().getUseTimestampOnResources())
> +               {
> +                       resourceResponse.setCacheDuration(RequestUtils.MAX_CACHE_DURATION);
> +                       resourceResponse.setCachePublic(true);
> +               }
> +
>                return resourceResponse;
>        }
>
>
>
>