Fix for parsing of "If-Modified-Since" header

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14679 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mike Hatfield
2009-06-12 09:37:23 +00:00
parent 0ef171598a
commit 36905ad325

View File

@@ -30,9 +30,12 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.Writer; import java.io.Writer;
import java.net.SocketException; import java.net.SocketException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -74,6 +77,11 @@ public class StreamContent extends AbstractWebScript
// Logger // Logger
private static final Log logger = LogFactory.getLog(StreamContent.class); private static final Log logger = LogFactory.getLog(StreamContent.class);
/**
* format definied by RFC 822, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3
*/
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
/** Services */ /** Services */
protected PermissionService permissionService; protected PermissionService permissionService;
protected NodeService nodeService; protected NodeService nodeService;
@@ -306,12 +314,24 @@ public class StreamContent extends AbstractWebScript
// check If-Modified-Since header and set Last-Modified header as appropriate // check If-Modified-Since header and set Last-Modified header as appropriate
Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED); Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
long modifiedSince = -1;
String modifiedSinceStr = req.getHeader("If-Modified-Since"); String modifiedSinceStr = req.getHeader("If-Modified-Since");
if (modifiedSinceStr == null) if (modifiedSinceStr == null)
{ {
modifiedSinceStr = "-1"; modifiedSince = -1;
} }
long modifiedSince = new Long(modifiedSinceStr); else
{
try
{
modifiedSince = dateFormat.parse(modifiedSinceStr).getTime();
}
catch (ParseException e)
{
if (logger.isInfoEnabled())
logger.info("Browser sent badly-formatted If-Modified-Since header: " + modifiedSinceStr);
}
if (modifiedSince > 0L) if (modifiedSince > 0L)
{ {
// round the date to the ignore millisecond value which is not supplied by header // round the date to the ignore millisecond value which is not supplied by header
@@ -322,6 +342,7 @@ public class StreamContent extends AbstractWebScript
return; return;
} }
} }
}
// get the content reader // get the content reader
ContentReader reader = contentService.getReader(nodeRef, propertyQName); ContentReader reader = contentService.getReader(nodeRef, propertyQName);